解耦與 MVC
版權聲明:本文為 cheng-zhi 原創文章,可以隨意轉載,但必須在明確位置注明出處!
什么是解耦?
軟件工程有個熟悉的概念:高內聚,低耦合。如果我們需要比較高的凝聚效果,我們當然會要先解除模塊之間的緊密關系。
解耦:把你的代碼組織成最小組織單位(模塊),并限制他們之間的交互。
當你將你的代碼解除耦合后,在你需要更換一個經過解耦的模塊時,其他的模塊仍然能夠正常工作。
一個解耦的例子:
耦合比較緊密,該函數增大了函數依賴的類的數目
void function(Date date, Selection selection)
{
TimeZone tz = selection.getRecoder().getLocation().getTimeZone();
}
解除了多余的依賴的類,函數接口只要求提供需要的東西,而不是挖通了調用的層次關系 - 實現了簡單的解耦。
void function(Date date, TimeZone tz)
{
}
/* 調用時只需要傳遞需要的東西 */
function(date, selection.getTimeZone());
解耦在軟件設計中占有很重要的地位,過度耦合會嚴重影響代碼的可拓展性,增加維護成本,所以理解解耦并運用到實際項目中非常有必要。
使模塊之間的耦合減少到最小。
MVC
Model-View-Controller (MVC),是 GUI 解耦的經典設計方法,我們必須熟悉并會使用這套方法。
什么是 Model ?
Model 即模型,表示要展示對象的抽象數據類型。什么是 View ?
View 即視圖,表示 Model 的展示方式,即 GUI 控件樣式。什么是 Controller?
Controller 即控制器,用來控制 View 顯示 Model,相當于 Model 和 View 的橋梁。
MVC 的關鍵概念:既讓模型與表示模型的 View 分離,也讓模型與管理視圖的控制器分離。
這樣一來,我們的模型,視圖,控制器就基本完成了解耦工作了。
簡單來說:MVC 在 GUI 上應用的思想就是讓控制器將數據模型按照一定的規則送到視圖上去展示。其中模型,視圖,控制器分別在代碼中體現為 3 個獨立的 class。
這個思想在我做的第一個項目就使用到了,項目需要解析指定的數據包中的數據(Model),然后在自定義的控件(View)上動態(Controller 來控制)顯示出來。項目的結構支撐很重要的一塊就是 MVC 了,可見它的重要性。
MVC 的應用還有很多,本人目前經驗不足,這里就不介紹了。