TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
我们在设计小的应用程序的时候, 设计出来自己的类并不需要太多关注分包的问题, 然而当设计大的应用程序的时候就必须要分包了。 然而类与类之间有的时候有依赖关系, 这种依赖关系甚至可能是跨越包延伸到其他的包, 因此包与包也是有依赖关系的。怎么样对包进行管理? 如下的问题需要进行考虑:
1)在向包中分配类的时候应该遵照什么原则?
2)应该使用什么设计原则来管理包之间的关系?
3)包的设计原则应该先于类(自上而下)?还是类的设计先于包?(自下而上)
4)如何实际表现出包?在C++中如何表现?在java中如何表现?
5)包创建好了之后, 将它们用于何种目的?
自下而上的包设计的几个原则:
包的内聚性原则:
{
1)共同重用原则。
对于使用者来说, 当依赖于一个包的时候, 应该是依赖于一个包中全部的类, 而不是仅仅某一个类。换句话说, 包中的类应该是不可分开的。否则的话,包将直接影响使用者的不必要的重新发布,编译。(这个原则能够避免包分得过于粗。)
2)共同封闭原则
包中的类对于同一类性质的变化应该是共同封闭的。一个变化如果如果对一个包产生影响,那么他对包中的类都产生影响,而对于其他的包不产生影响。(这个原则可以避免包分得过细!)
}
包的依赖性原则:
{
1)无环依赖原则。在包的依赖图中不允许存在环。
“有这种工作经历么? 工作一整天终于完成某个功能后回家,第二天清早去上班却发现那项功能却不能工作,原因是什么呢? 因为有人走得比你更晚,并且更改了你所依赖的那些东西。”---晨后综合症。
2)稳定依赖原则。
朝着稳定的方向进行依赖。
稳定性?
如果改变一个事物需要很大的力气,也就是难以改变, 那么它就是稳定的。
使一个类稳定的方法是让很多的类依赖于它,这样它就具有拒绝变化的n个理由,就是稳定的。相反,如果一个类没有任何类依赖于自己,反而依赖于其他的类,那么就是不稳定的。
3)稳定抽象原则。
抽象类通常是很灵活的, 能够适应OCP的需求。 包的抽象程度应该跟它的稳定性一致。
即:越是稳定的包,其中的类应该是最抽象的。
} |
|