C++编程规范之22:尽量减少定义性依赖。避免循环依赖

</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定义独立的抽象类,那么就能够打破循环了。

依赖有一种特殊的形式,一些设计颇受其害:派生类的依赖传递,即积累依赖于所有的派生类,包括直接的和间接的。对于这种情况,就要注意的设计程序的时候,要多用组合少用继承,这点和设计模式中的策略模式有相同点。

过度依赖的一个症状就是当局部发生变化时需要进行增量构建,不得不重新编译项目中的很大一部分代码。


    

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值