1. 程式人生 > >關於MVC的一點看法

關於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捧為香餑餑的時候,我來這麼一篇博文會讓他們很不高興,但我在開發中確實遇到了這樣的問題,這些問題不解決。