SmartPtr
本博客已搬至:http://www.cnblogs.com/baiyanhuang/
posts - 29,comments - 176,trackbacks - 0
By SmartPtr(http://www.cppblog.com/SmartPtr/)

粒度:包的内聚性原则
1) 重用发布等价原则(The Release Reuse Equivalency Principle (REP))

* 重用的粒度就是发布的粒度
* 一个可重用的包必须为发布跟踪系统所管理,使我们在新版本发布后我们还可以继续使用老版本
* 一个包中的所有类对于同一类用户来讲都应该是可重用的。

2) 共同重用原则(The Common Reuse Principle (CRP))
* 一个包中的所有类应该是共同重用的,如果重用了包中的一个类,就应该重用包中的所有类。
* 一般来说,可重用的类需要与作为该可重用抽象一部份的其它类协作,CRP规定了这些类应该属于同一个包。
* 放入同一包中的所有类应该是不可分开的,其它包仅仅依赖于其中一部份情况是不可能的(不允许的),否则,我们将要进行不必要的重新验证与重新发布,并且会白费相当数量的努力。(一个包依赖于另外一个包, 哪怕只是依赖于其中的一个类也不会削弱其依赖关系)
* CRP倾向于把包做的尽可能的小

3) 共同封闭原则(The Common Closure Principle (CCP))
* 包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包产生影响,则将对该包中所有类产生影响,而对于其他的包不造成任何影响。
* 这是单一职责原则对于包的重新规定。
* CCP鼓励我们把可能由于同样的原因而更改的所有类共同聚集在同一个地方。将变化限制在最小数据的包中。
* CCP倾向于将包做的尽可能的大。
* CCP有益于维护者(包的作者),而REP和CRP有益于重用者(包的使用者)。

稳定性:包的耦合性原则
4) 无环依赖原则(The Acyclic Dependencies Principle (ADP))
* 在包的依赖关系图中不允许存在环。
* 包的依赖关系图应该是一个有向无环图(DAG(Directed Acyclic Grphic))
* 存在环的系统,很难确定包的构建顺序,事实上,并不存在恰当的构建顺序。
* 打破环的第一个方法:依赖倒置原则,使一个包不再依赖于另一个包,而只是依赖于其抽象接口。
* 打破环的第二个方法: 创建一个新包来包含公共依赖部份。

5) 稳定依赖原则(The Stable Dependencies Principle (SDP))
* 朝着的稳定的方向进行依赖
* 你设计了一个易于更改的包, 其它人只要创建一个对它的依赖就可以使它变的难以更改,这就是软件的反常特性。通过遵循SDP可以避免这种情况。
* 不稳定性度量:I = Ce / (Ca + Ce). Ca: Afferent Coupling. Ce: Efferent Coupling
* SDP规定一个包的I度量值应该大于它所依赖的包的I的度量值,也就是说,I的度量值应该顺着依赖的方向减少。

6) 稳定抽象原则(The Stable Abstractions Principle (SAP))
* 包的抽象程度应该和其稳定程度一致。
* 一个稳定的包同时应该是抽象的,这样,其稳定性就不会导致其无法扩展。一个不稳定的包应该是具体的,这样,因为其不稳定性使得其内部的具体代码易于修改。
* 抽象性度量:A = Na / Nc Na: Number of classes. Nc:Number of abstract classes.
* 创建一个以A为纵轴,I为横轴的坐标图,最稳定,最抽象的包位于左上角(0,1)处, 那些最不稳定,最具体的包位于右下角(1,0)处。



posted on 2007-08-26 21:09 SmartPtr 阅读(814) 评论(2)  编辑 收藏 引用

FeedBack:
# re: 包的设计原则
2007-08-29 10:11 | Anders06
包的这几个原则到没仔细去看过.

<<敏捷软件开发>>看过了吧,记得我发过ebook给你的,,很赞的一本书

kao, 又说我验证码错误....  回复  更多评论
  
# re: 包的设计原则
2007-09-07 13:30 | SmartPtr
那本书还没看过。。。
  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理