天天看點

換個角度看MVC中的耦合性

換個角度看MVC中的耦合性

在MVC模式的主動通知中有兩種通知方案:

1,模型僅僅是通知視圖,模型發生了改變,至于具體發生了哪些改變并沒有告訴視圖,需要視圖在得到通知後,根據自己的興趣點去主動查詢模型中的相關資料。

2,模型在通知視圖時同時攜帶改通知相關的資料(這些資料通常可以滿足視圖進行更新的需要),這些資料通常是模型從自身提取出來并通過某種方式包裝起來,提供給視圖,視圖在得到通知的同時也得到了進行更新所必須的資料,就不用再去查詢模型了。

    其實第二種方式中因為模型要預先的提供通知相關資料,而這些資料通常已經足夠視圖使用,否則視圖還是要查詢模型的其它資料以滿足自己的需要(而這就傾向于向第一種方案靠攏)。也就是說模型通知時所提供的資料必須具有某種程度上的完備性,而這種完備性可能和視圖是相關的(至少在系統設計時要考慮視圖更新時需要哪些資料),而MVC的本意是要分離模型和視圖的耦合性,但是這種相關性确以一種隐式的方式(從系統詳細設計階段就開始了)引入了耦合性。也可以認為這種耦合性跟MVC所要解決的耦合性是不同的。

    從這種通知資料的完備性上來看,第一種方案實際上也存在這種相同的耦合性,因為視圖在得到通知後要主動查詢模型中的資料,是以在設計模型的時候需要提供一種接口來暴露模型的内部資料,唯一的不同就是這種接口相比與第二種方案中的通知資料包裝器來說要靈活的多。因為包裝器僅僅是為了攜帶某一個通知所需要的資料,是為此通知單獨設計的,不能用于其它地方。而第一種的接口确可以提供靈活的接口,最大限度的滿足不同種類通知查詢模型資料的需要。

繼續閱讀