2009-11-18 58 views
5

剛開始研究mvc,我不確定我是否掌握了它。從我收集的內容看來,它似乎是3層解決方案的一個實現,即模型對應於DAL,控制器到業務邏輯層,以及作爲表示層的視圖。MVC - 它只是一個3層模型?

我的基地在這裏嗎?

回答

8

我謹慎對待模型作爲一個簡單的數據訪問層。這太簡單了,它會導致你將太多的代碼放入控制器層。如果你在模型中放置更多的代碼,並且使數據庫持久性只是模型內部代碼的一部分,那更好。我喜歡把MVC的是這樣的:

  • 控制器:處理輸入,確定其型號並查看實例
  • 查看:應用程序數據的呈現
  • 型號:所有其他邏輯的應用,包括但不限於DAL

這基本上是Page Controller模式。

另一種考慮它的方法是:假設你必須將你的web應用程序移植到另一個平臺上,例如命令行應用程序或桌面GUI應用程序。應該重用哪些應用程序邏輯部分?當您將應用程序移植到另一個平臺時,Controller和View會發生變化,因爲輸入和輸出的實現都需要更改。不需要改變的代碼應該在您的模型中實現。

如果您已經完成了對問題的分離,那麼模型,視圖和控制器將最小程度地耦合,並且您可以更改一個的實現而不會太多地影響其他問題。如果您更改模型並且發現自己在Controller或View中重寫了大量代碼,則可能沒有充分分離這些層。反之亦然。

閱讀關於Martin Fowler的Anemic Domain Model反模式或Domain Driven Design Quickly以獲得其他觀點。

另請參閱我的blog from 2008,這是我爲響應人們對活動記錄模式進行解密而編寫的。它得到了一些很好的評論和討論。

+1

我同意。瘦身控制器和胖模型讓我的生活更輕鬆。 – 2009-11-18 06:36:38

3

整理。它看起來像這樣:

alt text

當今最常用的模式是:

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.它在一個參考文獻中描述了所有這些概念。

0

一個短信,你是正確的,當你說該控制器可(不必)是業務層,而視圖是表示層。

但是,模型是包含數據的對象(取決於實現),而數據層是檢索/操作數據的圖層。