2010-09-12 19 views
5

我問的原因是tvanfosson的(第一)評論他的回答他在另一個question of mine,他說(關於ASP.NET MVC):「服務器端控件的缺乏是由於關注的固有分離導致MVC一個很好的發展模式..「。
我當然知道ASP.NET服務器控件,我想我知道MVC設計模式,但我不明白服務器控件如何違反MVC。服務器控件如何違反MVC設計模式?

謝謝。

回答

0

發現的「臨ASP.NET MVC 2框架」由史蒂芬·桑德森答案(第5頁)

」 ......在現實中開發者encourged混合呈現代碼(例如,操縱服務器 - 在這些相同的巨大代碼隱藏類中使用它們的應用程序邏輯(例如,操作數據庫數據),如果沒有更好的問題分離,最終的結果往往是脆弱和難以理解的。

1

我認爲它與回發+ viewstate +事件模型有很大關係。

上述情況隱含出現以模擬用戶正在以多步方式與應用程序進行交互的模型,其中存在系統的各種狀態。由於每個控件都持有它的視圖狀態,每個控件都固有地對這個整體狀態做出貢獻,隨着頁面複雜度的增加,這種狀態可能變得難以遵循。我也相信便利性會促成這種複雜性。

上述可能更多的是一個寧靜的論點,它促進更多地依賴於協議的做事方式。使用帖子來達到上述目的,並不是HTTP協議所期望的。只是採取原始的asp.net網格內置分頁,因爲它基於回發搜索引擎忽略了第1頁以外的任何內容。您也不再有辦法通過url訪問上述信息頁面。

imho asp.net MVC模式中的MVC模式更多的是關於簡單的請求/響應操作。你可以讓它變得像你可能需要的那樣複雜,但它促進了一種更簡單的操作方式。它的基礎不是基於分散在頁面/視圖上的幾個不同位的信息來處理狀態,如經典;但如果這是你所需要的,你仍然可以實現它,但是當你這樣做的時候你必須更加明確。

+0

恕我直言,你描述的是服務器控制缺乏無狀態和簡單性,我看不出這些如何與MVC相矛盾。 – 2010-09-12 16:26:49

+0

@Oren將MVP(模型視圖演示者)視爲混合。這和MVC之間的一個重要區別是狀態的處理,因爲無論你把狀態放在哪裏,MVP都可以根據用戶的動作改變視圖,所以視圖不是隻顯示一次。在MVC中,您對每個動作都展示了不同的視圖(是的,您可以顯示相同的文件/視圖,但在概念上),下一個動作的處理與前一個無關。使用asp.net classic + server控件,常見的東西顯示相同,但​​在此控件中顯示此數據/或隱藏此數據。 – eglasius 2010-09-13 15:38:28

+0

請注意,@ tvanfosson可能有關於控制者的意見和責任的責任,所以他可能會根據(不)應該在視圖上做出更直接的解釋。對我來說,我發現它與MVP比較更清晰,因爲你可以有一個很好的結構化經典的asp.net應用程序,但仍然顯示出與MVC的重要區別。我認爲MVC的方式更符合HTTP的本質。 PS。請注意,asp.net MVC使用MVC的變體,還有其他變體。 – eglasius 2010-09-13 15:50:27