可维护性的常见度量指标
圈复杂度
代码行数
可维护指数
继承的层数
类之间的耦合度
单元测试覆盖率
聚合度和耦合度
耦合度:耦合指对模块之间的依赖关系的度量,如果两个模块之间的变化可能需要另一个模块的变更,则两个模块之间存在依赖关系。其基于以下两个因素:
①模块之间的接口数量(数量)②每个接口的复杂性(质量)
聚合度:是衡量一个模块的功能或责任的强烈程度的一个指标。若一个模块内的所有元素都朝着相同的目标努力,那么它就具有很强的内聚力。
最好的软件设计应该是具有高聚合度和低耦合度
SOLID:
(SRP) The Single Responsibility Principle 单一责任原则
不应有多于1个的原因使得一个类发生变化;一个类,一个责任
最简单的原则,却是最难做好的原则
(OCP) The Open-Closed Principle 开放-封闭原则
对扩展性的开放 + 对修改的封闭
模块的行为应是可扩展的,从而该模块可表现出新的行为以满足需求的变化。
但模块自身的代码是不应被修改的;扩展模块行为的一般途径是修改模块的
内部实现
如果一个模块不能被修改,那么它通常被认为是具有固定的行为
关键的解决方案:抽象技术(inheritance和composition)
(LSP) The Liskov Substitution Principle Liskov替换原则
子类型必须能够替换其基类型,派生类必须能够通过其基类的接口使用,客户端无需了解二者之间的差异
(DIP) The Dependency Inversion Principle 依赖转置原则
高级模块不应该依赖于低级模块,两者都应该取决于抽象
抽象的模块不应依赖于具体的模块;具体应依赖于抽象
优点:将类合同正式化;根据前后置条件定义例行服务
(ISP) The Interface Segregation Principle 接口聚合原则
客户端不应依赖于它们不需要的方法,最主要的是解决“胖”接口,这是由于“胖”接口不够聚合。
方法:“胖”接口可分解为多个小的接口;不同的接口向不同的客户端提供服务;客户端只访问自己所需要的端口
设计模式:
工厂模式
构造器模式
抽象工厂模式
构造器模式
桥接模式
代理模式
组合模式
Observer模式
Visitor模式
Mediator模式
状态模式
备忘录模式
正则表达式