2010-04-26 103 views
10

在一個控制器動作中使用多個模型是不好的習慣嗎? 它應該總是像一個控制器 - 一個模型 - 一個視圖?PHP和MVC,多個模型

+1

優秀的問題!遺憾的是,似乎沒有人關心這樣的問題! – Sliq 2013-10-21 11:58:42

回答

11

不,當然這不是一個壞習慣。如果您使用多個表格,那麼將需要各種型號。

問題不在於此,而在於框架能夠處理高級查詢,基於這些模型進行連接和過濾。當你「被迫」遵守框架關於數據庫交互的特殊審美時,這是一個bugbears,但這當然取決於哪個框架以及你依賴魔法行爲的程度。

不是每個項目都是一個簡單的博客! :)

編輯:我也應該說,這種事情是我一般的MVC框架的主要抱怨之一。你的項目試圖實現什麼,以及框架允許的總是妥協將會是頭髮丟失和晚上投入的地方..

+0

感謝您的快速回答! – PPPHP 2010-04-26 10:17:48

+0

在我看來,你的大部分代碼應該放在你的模型中,其中會有很多類。絕對不是模型和控制器之間的一對一映射。這將是一件壞事。 – d11wtq 2010-04-26 10:26:52

+0

是的,每個人都喜歡胖模特:) – dmp 2010-04-26 10:43:41

4

我無法想象只能用一個模型一次。這些數據庫被稱爲「關係數據庫」是有原因的。所有表互相交互。

我實際上使用的框架只允許加載與該控制器關聯的一個模型。絕對是一個可怕的經歷,唯一有效的操作是基本的CRUD操作。

+0

感謝您的快速回答! – PPPHP 2010-04-26 10:22:41

1

像其他人一樣,你可以自由地做你想做的事。我建議您在網站上查找您正在使用的框架,並查看其他人是如何使用它的。他們經常有「使用XXXX框架的項目」。

而像流行樂評論,1表並不總是等於一個模型。一些使用基本活動記錄模式(如CodeIgniter)的示例傾向於使用1表1模型方法。

2

不,這不是一個壞習慣。

控制器映射到HTTP資源(又名.URI)比您的數據模型更多。對特定資源(用戶,產品...)的請求可能經常需要從/在各個位置(數據庫表,文件系統,遠程Web服務...)加載和/或存儲數據,因此1:1控制器:模型映射甚至可能是例外而非規則。除非你的網站是真的是簡單。