閱讀721 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C++編程規範之22:盡量減少定義性依賴。避免循環依賴

</pre><p></p><p><span >摘要:     </span></p><p><span >不要過分依賴:人如果用前向盛名能夠實現,那麼就不要用包含(#include)定義。</span></p><p><span >     不要互相依賴:循環依賴是指兩個模塊直接或者間接地互相依賴。所謂模塊就是一個緊湊的發布單元。互相依賴的多個模塊並不是真正的獨立模塊,而是緊緊膠著在一起的一個更大的模塊,一個更大的發布單元。因此,循環依賴有礙於模塊性,是大型項目的禍根。請避免循環依賴。</span></p><p><span >    除非確實需要類型定義,否則應該優先使用前向聲明。一般而言,應該在模塊層次上考慮依賴性及其循環。模塊是一同發布的類和函數的緊湊幾何。</span></p><p><span >   </span></p><pre code_snippet_ snippet_file_name="blog_20131218_2_5409518" name="code" >class Child;

class Parent
{
	Child* mychild;
};

class Child
{
	Parent* myParent;
};

在上麵的代碼中Parent和Child存在互相依賴。代碼能夠通過編譯,但是有一個根本性的問題:兩個類不再是獨立的,而是相互依賴的。這種情況隻有這兩個類同屬於一個模塊(有同一個人或者小組開發,作為一個整體進行測試和發布)的時候。

為了打破循環,可以使用“依賴倒置原理”:不要讓高層模塊依賴於底層模塊;相反,應該讓兩者都依賴於抽象。如果能為parent或child定義獨立的抽象類,那麼就能夠打破循環了。

依賴有一種特殊的形式,一些設計頗受其害:派生類的依賴傳遞,即積累依賴於所有的派生類,包括直接的和間接的。對於這種情況,就要注意的設計程序的時候,要多用組合少用繼承,這點和設計模式中的策略模式有相同點。

過度依賴的一個症狀就是當局部發生變化時需要進行增量構建,不得不重新編譯項目中的很大一部分代碼。


    

最後更新:2017-04-03 12:53:51

  上一篇:go html中input標簽的tabindex屬性
  下一篇:go 圖片移動並進行邊界判斷