作者: hdvd-rom 時間: 2008-10-25 04:52 標題: 使用MVC寫網頁的疑問
MVC基本概念是將view(interface), model(data), controller(logic)分開.
即是每一次都是由controller處理要求,由model提取需要的資料,最後把資料填上view之上.
基本上不鼓勵在view有任何邏輯動作.
但實寫網頁時就出了一個疑問,如網頁上有一些widget類的東西需要model的資料,但那些資料與那事件和產生那網頁controller/action無關係.
那應該怎樣解決?
一個實際例子, 一個網誌的主頁,中間是最新文章,兩旁是一些輔助性的物件,如最新回應列表,網誌分類.
最新回應列表,網誌分類,這些物件都是需要到model,但它和那頁本身的關係很弱.而且同時它們也會在不同的controller/action(頁面)出現.
如果在每一個action都要重覆這些物件的code無疑大有問題,但若view不可直接和model溝通,不可包含邏輯,那麼可以怎樣解決這問題?
[ 本帖最後由 hdvd-rom 於 2008-10-25 04:55 編輯 ]
作者: hkjoey 時間: 2008-10-25 09:04
可以試下用cache解決經常讀取既問題
至於view其實本身就唔使寫任何logic語法
只需要調用返變量就ok
作者: hdvd-rom 時間: 2008-10-25 13:31
我不擔心經常讀取的問題,因為database已做了cache.
問題就是不知怎樣避免在view直接調用model
作者: thinkpanda 時間: 2008-10-25 15:28
原帖由 hdvd-rom 於 2008-10-25 04:52 發表
MVC基本概念是將view(interface), model(data), controller(logic)分開.
即是每一次都是由controller處理要求,由model提取需要的資料,最後把資料填上view之上.
基本上不鼓勵在view有任何邏輯動作.
但實寫網頁時就出 ...
咁既話, 你既Controller 實質上會係數個Controller 既綜合體. 每部份處理網頁既唔同部份. Java Portlet 既設計就係呢種想法.
但係傳統Java Servlet 架構下都可以做到所需要既功能. 你可以係一個Controller delegate 工作去唔同既Controller, 然後用IoC 將Controller 整合埋一齊, 你可以用Filter 或AOP 技巧將重覆出現既Widget 既controller 抽離主要application controller 之外, 你可以用Sitemesh 或Struts Tiles 方法將一個版面交由唔同Controller 處理. 不一而足.
作者: hdvd-rom 時間: 2008-10-25 18:51
這也有想過,但沒有想得太深入, 由獨立的controller處理widget,再由另一個controller處理工作分配. 但感覺上好像和MVC的想法有點不同. controller的工作沒有分清,controller同時包含了處理layout的邏輯.把部份view的工作做了.
跟portlet的做法,工作會正確分配,但對widget類就不能作準確控制,當然因為無用過portlet所以不知它是否另有方法去做.
不過對於我現在的清況,這似乎是其中一個可行的方法
若果將widget本身當係另外一個data model咁再由controller向佢拎資料會唔會好d?
[ 本帖最後由 hdvd-rom 於 2008-10-25 20:52 編輯 ]

