關於MVC的一點看法
最近,這個微軟的MVC,是在圈內非常的火熱,貌似不會mvc,都有點丟人。
這個產品也有很多年了,從mvc3我就關注過,當時覺得不怎麼好,就沒有用,現在是mvc5了,也關注了下,覺得還是不是太好。也可能是我有點閣僚。
為什麼我就非常不喜歡呢?
有句話是這樣說的,愛屋及烏 。
而我是 惡其餘胥 。
Razor 非常糟糕!
雖然是伺服器端的頁面解析 引擎,可能比WebPage好多了,但是這個寫法,在html程式碼裡面,嵌入了一些伺服器端程式碼,感覺又回到了asp時代,jsp時代,不進反退。
我這麼說是因為,好多用mvc的同時是這樣寫的。
<tbody>
@{
/*通過部門bll繫結迴圈中有關部門id的欄位變為部門名稱*/
Base_InstitutionsSetBll bi = new Base_InstitutionsSetBll();
Base_RoleBll br = new Base_RoleBll();
string shzt = null;
}
@if (ViewData["ErrMsg"].ToString() == "")
{
foreach (var item in Model)
{
<tr>
<td class="hidden-480 center">
@item["YHZH"]
</td>
<td class ="center">
@item["YHXM"]
</td>
<td class="center">
@{
if (item["SHZT"].ToString() == "1")
{ shzt = "已稽核"; }
if (item["SHZT"].ToString() == "0")
{ shzt = "未稽核"; }
if (item["SHZT"].ToString() == "2")
{ shzt = "稽核未通過"; }
}
@Html.Raw(shzt)
</td>
<td class="center">
@Html.Raw(item["ZHZT"].ToString() == "1" ? "啟用中" : "<font color=red>禁用中</font>")
</td>
<td class="center">
@item["ZCSJ"]
</td>
<td class="center">
@item["DLCS"]
</td>
</tr>
}
}
</tbody>
是我這位同事寫的糟糕呢?還是大家都是這樣?
在Razor檢視,也就是View檢視層面,出現大量後端程式的程式碼邏輯,這個是前端程式完全看不懂的。
據說MVC要分層,要做到前後端分離。在檢視層,只進行資料的顯示,進行一些簡單的邏輯,而不是把所有的邏輯放在前端,在前端還進行大量的業務呼叫,可能還會出現對資料庫的操作呼叫。
如果是在檢視層,只寫普通的html程式碼,以及一些擴充套件的html標籤,以及呼叫一些函式會怎樣呢?例如這樣……
<tbody>
<eye:foreach collection="${vipUserList}" var="vipuser" index="index">
<tr>
<td>${index}</td>
<td>${vipuser.UserName}</td>
<td>${vipuser.Name}</td>
<td>${vipuser.Gender}</td>
<td>${vipuser.Phone}</td>
<td>${cdatestring(vipuser.CreateDate,'yyyy-MM-dd HH:mm')}</td>
<td>${vipuser.Nickname}</td>
<td>
</td>
</tr>
</eye:foreach>
</tbody>
注:據說mvc6就可以避免出現大量的C#程式碼了
解析流程特別糟糕!
在使用MVC時,如果需要訪問某個頁面,是不能訪問的,必須有一個控制器,也就是,每個頁面對應一個控制器,不然是無法訪問的。例如有個檢視是logon.cshtml,而頁面可能就是個簡單的登入框,不需要任何的後臺程式碼,此時,也不能直接進行訪問,必須通過一個Action才能訪問到。
我這樣說對麼?
如果我們能直接訪問到logon這個頁面就好了,例如: /sys/logon.aspx
自定義Route解析規則
mvc的路由規則有點讓人很憤怒!
例如,我想讓所有不符合規則的請求都請求某個action或者某個頁面(不是404頁面),這個時候,我傻了,MVC本身不可以這樣,只能返回一個404.
我們是不是可以讓所有不符合規則的請求,都請求我們自己定義的某個Action呢?(設定404屬於mvc的體制範疇之外) 然後我們根據請求,來輸出內容。
可能在所有人都把MVC捧為香餑餑的時候,我來這麼一篇博文會讓他們很不高興,但我在開發中確實遇到了這樣的問題,這些問題不解決。