組件聚合三原則

寫在前面:在研究一個新東西的時候,我習慣于拿手頭的項目去做類比,所以即使這些原則更多的是在描述面向?qū)ο螅以诶斫獾臅r候也是在往嵌入式C實時系統(tǒng)去靠的。

先列上三個原則:

1. REP復用/發(fā)布等同原則:軟件復用的最小粒度應等同于其發(fā)布的最小粒度。

2. CCP共同閉包原則:我們應該將那些會同時修改,并且為相同目的而修改的類放到同一個組件中,而將不會同時修改,并且不會為了相同目的而修改的那些類放到不同的組件中。

3. CRP共同復用原則:不要強迫一個組件的用戶依賴他們不需要的東西。

作為一個架構(gòu)菜鳥,這里面有很多概念是模糊的。

首先,什么是復用。百度百科這么描述:“將已有的軟件成分用于構(gòu)造新的軟件系統(tǒng)”,通俗講,我覺得是這個迭代發(fā)布的成分功能,未來仍然在這個成分的基礎上修改之后發(fā)布新的功能。

那么REP原則在主張什么。從代碼角度,完全的REP原則會導致軟件變大。比如特性跨組件是很常見的,按照REP原則,這些跨組件的功能應該屬于一個組件。我覺得REP原則在組件設計中的作用非常虛,簡單來說就是功能內(nèi)聚。換個角度看REP,他提出了一系列非組件設計的要求:能容易地添加新的功能擴展,組件內(nèi)的模塊遵循統(tǒng)一的發(fā)布版本。

REP原則我覺得放在軟件項目管理里非常合適。DDD強調(diào)劃分特性團隊,特性終結(jié)在團隊,粗暴的特性團隊劃分又會導致架構(gòu)守護困難,此時通過劃分領域的方式將交付節(jié)奏或波及頻率相同的組件劃分到同一個領域能解決架構(gòu)守護的問題。

共同閉包原則是組件級的單一職責原則。我一直覺得單一職責原則是水很深的原則。脫離業(yè)務,你很難說清什么叫單一職責。單一職責函數(shù)的命名實際上定義了文件或函數(shù)之間的統(tǒng)一概念和層次結(jié)構(gòu)。變更頻率相同的塊放在同一個組件,變更頻率相同從側(cè)面描述了“相同目的”,這是REP更進一步的描述。CCP原則和開閉原則的關聯(lián)有點略顯牽強,其實還是在說統(tǒng)一變更頻率。

共同復用原則建議將經(jīng)常共同復用的類和模塊放在同一個組件中?!爱斘覀儧Q定要依賴某個組件時,最好是實際需要依賴該組件中的每個類”,這條建議可以說非常具體了,它實際告訴我們哪些功能塊不能被放在一起。

三個原則關系見下圖:

圖片發(fā)自簡書App

三個圓圈把三個原則的本質(zhì)目的講得很清楚。不關注CCP會導致組件劃分太多太細,即使簡單功能也會波及很多組件;不關注CRP會導致大組件,很多小功能頻繁發(fā)布。文中說,隨著項目逐漸成熟,項目重心會左移,CCP移向CRP好理解:為了追求開發(fā)速度,組件功能小而單一,大組件維護方便,隨著功能越來越多,就會進行組件拆分。向REP移動不是很好理解,主要是這里的復用性:怎樣的組件劃分能對新增需求更加親和。待我再找找資料再來回答吧。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 關于組件聚合張力圖的討論 周三的午休時間,我在ThoughtWorks北京辦公室分享了一場《架構(gòu)整潔之道導讀》。當...
    lambeta閱讀 2,439評論 0 3
  • 組件聚合 組件的定義 組件是軟件部署的最小單元,是整個軟件系統(tǒng)在部署過程中可以獨立完成部署的最小實體。比如,對于J...
    lambeta閱讀 4,832評論 0 12
  • 什么是面向?qū)ο蠹夹g 面向?qū)ο蠹夹g是一種以對象為基礎,以事件或消息來驅(qū)動對象執(zhí)行處理的程序設計技術 面向?qū)ο笥心男┨?..
    CyrusChan閱讀 1,642評論 0 1
  • 閑言碎語 雖然幾年前懵懵懂懂看完設計模式神書,可惜功力不夠,無法透徹理解,也沒有留下啥?,F(xiàn)如今重拾神書,簡述學習摘...
    雙魚子曰1987閱讀 910評論 0 2
  • 旅行似乎開始變得不那么正經(jīng),訂好票,背個包,穿雙拖鞋就出發(fā)。在昨天晚上跑完西湖之前,連我自己都說不清,我究竟為什么...
    黑土白水閱讀 317評論 0 1

友情鏈接更多精彩內(nèi)容