评价软件复用性的可维护性指数: 1.霍尔斯特德容积 2.圈复杂度 3.每个模块平均行数 4.每个模块的注释行百分比
主要是高内聚,低耦合,分离关注点,信息隐藏。
责任:变化的原因 SRP:不应有多余1个的原因使得一个类发生变化 一个类、一个责任。 引入额外的包,占据资源 导致频繁的重新配置、部署等。
对扩展性的开放 模块的行为是可扩展的,从而该模块可表现出新的行为以满足需求的变化。 对修改的封闭 但模块自身的代码是不应被修改的 扩展模块行为的一般途径是修改模块的内部实现 如果一个模块不能被修改,那么它通常被认为是具有固定的行为。 关键的解决方案:抽象技术
子类型必须能够替换其基类类型 派生类必须能够通过基类的接口使用,客户端无需了解二者之间的关系。
将功能通过接口进行分离,使得降低耦合度。
抽象的模块不应依赖于具体的模块; 具体应依赖于抽象。 也就是delegation的时候,要通过interface建立联系,而并非子类。
通过责任分配软件模式,GRASP是关于如何为“类”和“对象”指派“职责”的一系列原则。 具体可见维基百科