2010-04-18 50 views
5

我讀了很多關於MVC架構的文章,但我仍然感到困惑。MVC架構的正確實現

  • 哪個圖是正確的?
  • 是否存在MVC架構的正確實現?
  • 我可以使用MVC體系結構的不同實現嗎?

圖1

Diagram 1 http://img219.imageshack.us/img219/4576/screenshot20100418at213.png

圖2

Diagram 2 http://img38.imageshack.us/img38/4576/screenshot20100418at213.png

圖3

Diagram 3 http://img526.imageshack.us/img526/3900/screenshot20100418at214.png

+2

箭頭代表什麼? – mkorpela 2010-04-18 20:08:01

+0

也許箭頭意味着依賴/可見性? – 2010-04-18 20:58:46

回答

8

MVC可以通過思考責任理解。該視圖仍然可以直接訪問該模型,儘管僅用於查看(或者通過具有不是官方模型的副本)。

該模型應該存在於它自己的宇宙中,並且沒有任何對控制器或視圖的引用。

控制器控制狀態並訪問模型。

+0

這是正確的答案。 – 2010-04-18 20:10:08

+0

在現實中,模型總是必須有一個對控制器的引用,不管是通過某種網絡協議還是直接通過C++/JAVA指針/引用都無關緊要。否則將無法訪問...... 順便說一句:今天的MVC實現(Android,Windows WPF,Qt)大部分都不是純粹的MVC。我相信這主要是因爲性能原因。我們可以談論一個純粹的MVC,只有通過XML消息才能間接訪問模型的數據。 – vitakot 2012-01-09 16:36:42

+1

@vitakot:我不明白你爲什麼認爲這個模型需要知道其他組件的任何東西 - 你可以在沒有它參考的情況下訪問該模型。 – mkorpela 2012-01-31 07:38:05

0

我學習好的MVC技術的策略是找到知道並提出許多問題的人。問一羣我們誰不知道你的要求,你的意圖或你的想法並沒有太大的好處。

它的我認爲圖1將被視爲'最好'的圖,但不知道你的獨特情況,最好向知道你的需求和MVC架構的其他人解釋你的需求。 - 只有通過控制器

的看法是不允許改變直接模式的狀態:

1

絕對不是圖3!圖1是可以的。我認爲最好的基本上是圖2,從Controller到View有一個箭頭。

假設你是問在web應用程序的情況下,這裏是我認爲一個良好的MVC流程是這樣的:

  1. 當Web請求時,它是2種類型之一。

    A型 - 這是一個直接被映射到視圖的簡單請求,因此沒有控制器參與

    B型 - 這是請求映射到控制器

  2. 對於這兩種類型A和B視圖總是直接從模型中讀取數據

  3. 如果是類型B請求,則控制器讀取/更新模型,並在完成時要求MVC框架向客戶端返回視圖。該視圖讀取更新模型並呈現給客戶端。

這是由Induction MVC framework支持的方法。

希望這會有所幫助。

+0

謝謝,這真的幫了我很大的忙。 – 2010-04-18 20:17:55