做網站的MVC模式到底如何分配model。
巴扎黑
巴扎黑 2017-05-16 17:06:54
0
7
587

MVC模式中controller是一個管道,Model是處理器。但很多時候Controller會需要到不同表格的不同內容。這樣如果在Model中就會有很多像get_name,get_info,get_id之類的只要一條Query就能完成的功能。感覺很累贅。其實在Controller要用的地方寫條Query就好了,但是這樣又破壞了MVC的規則。

現在的想法是把挑出用的多的函數放到Model裡面,把零碎的在留在Controller裡面。
求各位給點意見撒~

巴扎黑
巴扎黑

全部回覆(7)
習慣沉默

瘦C,胖M,C最好不要超過15行

迷茫

其實你說的這個問題很多框架都可以解決,也就是active record功能,也就是根據程式碼動態生成query語句,它最開始在rails框架裡得到推廣,並逐步在其他語言裡得到實現。如

$userModel->find_one_by_id(123);

實際上如果你的框架支援active record,像這種簡單的根據主鍵查詢,我們是不需要在model裡寫一行代碼的,model基類根據你所調用的方法名,組裝成合適query語句,並將查詢結果回傳給你。

我不知道你使用的是何種語言,但目前基本所有的腳本語言都有active record的實現,你可以在自己的專案中實現這一功能,這樣也為後續的開發帶來好處。

能在程式碼中約束的問題,比用一些設計原則約定更有效,因為你不能保證每個開發者的水平都一致。

世界只因有你

可以參考下fowler的模式書, 事物腳本,表格模組,領域模型三種風格.

迷茫

我不知道ci是如何實現active record的,不過你說的小函數,在許多php的active record實作裡面都是使用的魔術方法,或是程式碼產生器自動幫你產生的,都不用你自己寫。

舉一個例子,active record在doctrine裡面是這樣實現的:假如一個表foo,帶字段bar1, bar2, bar3,doctrine會根據table schema直接產生四個檔案: FooTable.class.php,FooTableBase.class.php ,Foo.class.php,FooBase.class.php。在兩個base檔案裡面,會有一系列自動產生的getter和setter例如getBar1(),setBar1($param)這些方法。 base檔案是不允許程式設計師自己修改,它會隨著schema的改變而改變。而非base類直接繼承了base類,所以看起來這個類會乾淨許多

滿天的星座

把你的應用邏輯放在model裡面

Peter_Zhu

做好分層吧,controller負責頁面層級的控制邏輯

迷茫

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板