關於 MVC 模式中的通知機制

1         MVC 簡介
一般應用中用戶界面的變化相對較爲頻繁 , 有時需要支持多種表現模式(如 WEB 客戶端和 GUI 客戶端),但是數據和業務邏輯相對保持穩定。
MVC(Model-View-Controller) 模式是一種常用的設計模式 ,MVC 將模型 , 顯示和控制進行了分離,可以使得應用更加方便實現對多種表現模式的支持及降低表現形式修改對整體系統的影響。由於本文重點討論的是 MVC 中的通知機制,至於 MVC 的其它內容可以參考其它相關文檔。
 
 
1.GIF
圖表 1 MVC 模式
2         MVC 的通知機制
上圖是在 SUN J2EE BluePrints 中關於 MVC 模式的描述 , 在實現 MVC 模式時首先應該注意的是模型與視圖之間的關係。在這些關係中尤其值得大家注意的是模型通知視圖,如果不能正確的設計這個通知機制(模型與視圖之間關聯實現通知)便會完全違背 MVC 的設計初衷。 MVC 模式的其中一個目的在於使模式獨立與視圖,然而不正確的理解和設計通知機制會導致模型和試圖的依賴性。
2.1     採用 Observer 模式實現通知機制
既要實現模式到視圖的通知機制,同時有要確保實現模型與視圖的分離。通常我們可以通過Observer模式來實現這樣的通知機制。
2.GIF

圖表2 Observer模式
視圖實現 Observer 接口,並向模型註冊,模型通過調用所維護的觀察者的實例調用 Update 方法來通知視圖進行刷新。可見, Observer 接口有效的實現了模型和視圖間的耦合性的分離。
 
 
2.2     模型通知視圖還是控制器通知視圖
 
3.GIF
圖表 3 基於 MVC 的 J2EE 應用
在將 MVC 模式應用於的總體結構時,常常會有是模型通知視圖還是控制器通知視圖的問題,其實我認爲這個問題完全取決於對系統各個部分的劃分和理解,如果我們把模型層更多劃分爲數據實體 ( 如: Entity Bean) 則可能會發現,其實我們的通知機制是不能由模型部分來完成的,而是由我們的控制器來完成的。這種劃分好象有些違背了 MVC 模式,但實事上特別是一些想要同時支持 B/S C/S J2EE 應用,控制器和模式通知機制常常有較大的耦合性( C/S 結構中,客戶完全通過會話 Bean 來完成業務),可能有時在一起實現更好。
總之,更好的內聚性和更鬆散的耦合性纔是架構設計的重點,應該做出適合自身應用的 MVC 架構。
 
 
3         結束語
MVC 模式的關鍵在於分離易變和不易變部分間的耦合性,所以在應用 MVC 模式時一定要注意解耦纔是關鍵,同時一定要更據具體的使用環境進行調整,不要生搬硬套,如 Microsoft MFC 採用的 Document-view 就是 MVC 的變體,它把控制器合併到視圖中,這是因爲考慮了視圖與控制器緊耦合的影響。
 
【參考文獻】
1. Sun Microsystem J2EE BluePrints
2. GOF,Design Patterns, 機械工業出版社, 2002
 
作者:
北京天融信,軟件架構師
SUN certified Enterprise Architect
Microsoft certified Solution Developer
IBM certified RUP Specialist
010-82776427
 
發佈了38 篇原創文章 · 獲贊 7 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章