剛開始研究mvc,我不確定我是否掌握了它。從我收集的內容看來,它似乎是3層解決方案的一個實現,即模型對應於DAL,控制器到業務邏輯層,以及作爲表示層的視圖。MVC - 它只是一個3層模型?
我的基地在這裏嗎?
剛開始研究mvc,我不確定我是否掌握了它。從我收集的內容看來,它似乎是3層解決方案的一個實現,即模型對應於DAL,控制器到業務邏輯層,以及作爲表示層的視圖。MVC - 它只是一個3層模型?
我的基地在這裏嗎?
我謹慎對待模型作爲一個簡單的數據訪問層。這太簡單了,它會導致你將太多的代碼放入控制器層。如果你在模型中放置更多的代碼,並且使數據庫持久性只是模型內部代碼的一部分,那更好。我喜歡把MVC的是這樣的:
這基本上是Page Controller模式。
另一種考慮它的方法是:假設你必須將你的web應用程序移植到另一個平臺上,例如命令行應用程序或桌面GUI應用程序。應該重用哪些應用程序邏輯部分?當您將應用程序移植到另一個平臺時,Controller和View會發生變化,因爲輸入和輸出的實現都需要更改。不需要改變的代碼應該在您的模型中實現。
如果您已經完成了對問題的分離,那麼模型,視圖和控制器將最小程度地耦合,並且您可以更改一個的實現而不會太多地影響其他問題。如果您更改模型並且發現自己在Controller或View中重寫了大量代碼,則可能沒有充分分離這些層。反之亦然。
閱讀關於Martin Fowler的Anemic Domain Model反模式或Domain Driven Design Quickly以獲得其他觀點。
另請參閱我的blog from 2008,這是我爲響應人們對活動記錄模式進行解密而編寫的。它得到了一些很好的評論和討論。
整理。它看起來像這樣:
當今最常用的模式是:
Database -> DAL -> BLL -> Controller -> View Model -> UI
凡
DAL == Data Access Layer (aka ORM, Object-Relational mapper)
BLL == Business Logic Layer
注意,你並不總是需要每一層。例如,如果應用程序足夠小,BLL和View Model可以是可選的。
您應該查看NerdDinner tutorial.它在一個參考文獻中描述了所有這些概念。
這裏一些偉大的解釋,如果你是新來的MVC:
一個短信,你是正確的,當你說該控制器可(不必)是業務層,而視圖是表示層。
但是,模型是包含數據的對象(取決於實現),而數據層是檢索/操作數據的圖層。
我同意。瘦身控制器和胖模型讓我的生活更輕鬆。 – 2009-11-18 06:36:38