2011-01-14 68 views
2

我使用MVC模型5個月。我同意MVC,組織頭腦的好技術。但每次我嘗試編寫模型時,我都會寫模塊,這種混淆提出了一個問題,爲什麼它是模型,而不是數據或數據庫或存儲等。最不相關的通用名稱就是模型。爲什麼模型視圖控制器不是查看邏輯數據庫?

我好與視圖,但控制器應該是邏輯或路由器,我認爲。

維基百科:

圖案隔離 「域邏輯」 從用戶接口 (用於用戶的應用程序邏輯) (輸入和 呈現

該模型管理應用領域的行爲,並數據

控制器接收輸入,並啓動通過對模型進行通話對象

響應爲什麼我們用模型,視圖和控制器作爲這種模式的名字嗎?

+0

這是一個相當冗長的流簡潔性,我錯過了實際的問題。你能澄清你的問題嗎? – Oded 2011-01-14 10:35:14

回答

2

您引用的文字(重點略有轉移)指出「該模型管理行爲和應用程序域的數據。」可以在數據庫中將行爲定義爲存儲過程,但更常見的是它可以完全編碼或至少部分編碼爲應用程序的主機語言(C/C++/C#/ ASP/Perl/PHP /其他)。

「模型」和「數據庫」是不能互換的條款 - 該模型不僅僅是數據庫得多,它並不僅僅是存儲數據等等。

0

在一個精心設計的應用程序,數據被稱爲「數據模型」的原因是,我們結構,什麼叫做模型的數據,因爲它的「造型」的經營理念(例如,和順序可以有秩序細節行,或者一個人可能是一個客戶或一個員工)

這就是爲什麼它被稱爲模型,因爲它通常是真正的數據結構的抽象,它通常不知道它是如何存儲的(數據庫,平坦文件在內存中,穿孔紙帶,信鴿...無論..)

這是一個通用的概念,因爲模型不應該是具體的關於它的實現細節。

1

我同意大衛的觀點:但也許我可以添加到它有點...

你應該記住,層不應該知道什麼更多的是它下面的一個級別......

在我的情況是,控制器向模型發出請求:這恰好需要一個數據庫視圖來連接兩個獨立的數據庫......但是這是一種很好的做法(MVC中唯一真正的做法),即控制器永遠不會知道這一切 - 它需要要知道的是,當它要求一個模型時,該模型知道如何得到它。

這就是問題所在。模型模擬一個「事物」,並且控制器應該明確知道它如何得到「事物」。具有諷刺意味的是,當你添加一個可選但推薦的額外圖層時,我發現這變得更容易理解:數據庫抽象。

這增加了另一層分離。安裝程序(如Moodle)時會看到這一點,它會詢問您使用的是何種類型的數據庫連接。它知道如何與數據庫交談,但是它使用的語言對於模型來說是隱藏的。

正常使用情況:控制器要求提供模型,模型要求數據庫抽象層提供結果。 當您從MySQL更改爲MSSQL/XML/carrier鴿子時,該模型不需要更改。

這解釋了爲什麼模型不是「數據庫模型」。它實際上不涉及數據庫。