</pre><p></p><p><span style="font-size:18px">摘要: </span></p><p><span style="font-size:18px; color:#ff0000">不要过分依赖:人如果用前向盛名能够实现,那么就不要用包含(#include)定义。</span></p><p><span style="font-size:18px; color:#ff0000"> 不要互相依赖:循环依赖是指两个模块直接或者间接地互相依赖。所谓模块就是一个紧凑的发布单元。互相依赖的多个模块并不是真正的独立模块,而是紧紧胶着在一起的一个更大的模块,一个更大的发布单元。因此,循环依赖有碍于模块性,是大型项目的祸根。请避免循环依赖。</span></p><p><span style="font-size:18px"> 除非确实需要类型定义,否则应该优先使用前向声明。一般而言,应该在模块层次上考虑依赖性及其循环。模块是一同发布的类和函数的紧凑几何。</span></p><p><span style="font-size:18px"> </span></p><pre code_snippet_id="118336" snippet_file_name="blog_20131218_2_5409518" name="code" class="cpp">class Child; class Parent { Child* mychild; }; class Child { Parent* myParent; };
在上面的代码中Parent和Child存在互相依赖。代码能够通过编译,但是有一个根本性的问题:两个类不再是独立的,而是相互依赖的。这种情况只有这两个类同属于一个模块(有同一个人或者小组开发,作为一个整体进行测试和发布)的时候。
为了打破循环,可以使用“依赖倒置原理”:不要让高层模块依赖于底层模块;相反,应该让两者都依赖于抽象。如果能为parent或child定义独立的抽象类,那么就能够打破循环了。
依赖有一种特殊的形式,一些设计颇受其害:派生类的依赖传递,即积累依赖于所有的派生类,包括直接的和间接的。对于这种情况,就要注意的设计程序的时候,要多用组合少用继承,这点和设计模式中的策略模式有相同点。
过度依赖的一个症状就是当局部发生变化时需要进行增量构建,不得不重新编译项目中的很大一部分代码。
时间: 2024-10-30 07:15:10