设计原则和设计模式的关系
设计原则和设计模式是互补的,设计原则主要用于指导“类的定义”的设计,而设计模式主要用于指导“类的行为”的设计。
敏捷设计
敏捷设计是一个过程,不是一个事件。它是一个持续的应用原则、模式以及实践来改进软件的结构和可读性的过程。我觉得敏捷模式要比瀑布模式强很多。
谁拥有接口
接口属于它的客户,而不是它的派生类。客户和接口之间的逻辑绑定关系要强于接口和它的派生类之间的逻辑绑定关系。它们的关系强到没有接口就无法使用客户!但是在没有某个接口派生类的情况下却依然可以使用客户(可能有其它派生类)。逻辑关系的强度和实体关系的强度是不一致的,继承是一个比关联强得多的实体关系。
内聚
判断一个模块的“内聚性”的高低,最重要的是关注模块的元素是否都忠于模块的职责。
7种内聚
- 偶然内聚,这是最差的一种内聚,模块内的元素之间没有什么关系,比如“Utils”这样的包。
- 逻辑内聚,模块中的元素在逻辑上属于一个比较宽泛的类别,比如:“鼠标”、“键盘”划分为“输入”类,逻辑内聚必偶然内聚好一点。
- 时间内聚。
- 过程内聚,模块中各元素必须按照固定“过程顺序”进行处理,与时间内聚的区别在于,时间内聚中各元素的顺序可以随意调整,而过程内聚中元素的先后顺序是严格要求的。
- 信息内聚,最典型的例子是“增、删、改、查”某个数据的模块。
- 顺序内聚,模块中元素的输出是另外元素的输入,类似流水线,上一个环节的输出是下一个环节的输入。
- 功能内聚,这是最好的一种内聚,元素都是为了完成同一个单一任务,而且缺一不可。
耦合
耦合是程序模块相互之间的依赖程度。内聚关注模块内部的元素结合程度;耦合关注模块之间的依赖程度。
8种耦合
- 无耦合。
- 消息耦合,这是一种耦合度很低的耦合,因为调用方仅仅以来被调用方的“消息”,既不需要传参数,也不需要了解被调用方的内部逻辑,更不需要控制调用方内部的逻辑。
- 数据耦合,通过传参传递,并且参数必须为基本数据类型。
- 数据结构耦合。
- 控制耦合。
- 外部耦合,当两个模块依赖相同的外部数据格式、通信协议、设备接口时,称为外部耦合。
- 全局耦合(普通耦合),两个模块共享的全局变量。
- 内容耦合,当一个模块依赖另一个模块的内容(主要是数据成员)时,称为内容耦合,这是最差的,也叫“病态耦合”。
发表回复