模块
模块就是从逻辑上将系统分解、分割成更小的部分,将复杂的问题分解成几个简单的问题,逐一解决。
耦合主要描述模块之间的关系,凝聚主要描述模块内部。 模块粒度烂云小,函数、类、功能块等。
偶联反应
由于模块之间存在依赖关系,更改可能会相互影响,关系越紧密,耦合越强,模块的独立性越差。
例如,如果模块a直接操纵模块b中的数据,它将被视为强联接;如果a只通过数据与模块b进行交互,它将被视为弱联接。
独立的模块易于扩展、维护和单元测试的写入,模块之间的依赖程度高会大大降低开发效率。
凝聚
模块内部元素相关性越强,聚集程度越高,模块单一性更强。 一个模块必须尽可能独立地完成某项功能。
如果存在需要部署到当前模块中的各种场景,代码质量将变得非常脆弱。 在这种情况下,建议将其划分为多个模块。
低凝聚的模块代码,维护、扩展、重构都相当麻烦,很难插手。
界面设计原则
好的界面应该满足设计模式的六个原则,大多数设计模式都是基于框架高内聚低耦合的出发点。 单一职责原则:一个班级只负责一个功能区域内的相应职责。
开合原则:一个软件实体必须对扩展开放,对修改关闭。
替换原则:引用基类(父类)的所有位置都必须能够透明地使用该子类的对象。
依赖逆转原则:抽象不应该依赖细节,细节应该依赖抽象。 这意味着您必须为接口编程,而不是为实现编程。
接口隔离原则:使用多个专用接口,而不是单个总接口。 这意味着客户端不应依赖于不必要的接口。
德米特里定律:一个软件实体必须尽量避免与其他实体相互作用。 例如,外观图案,使外部露出统一的界面。
举几个栗子
外观模式
为系统中的多个子系统提供一致的对外调用,向客户端隐藏子系统细节,减少与子系统的耦合。
桥接模式
在JDBC中,面向制造商的接口(Driver )和面向用户的API ) drivermanager )被分离隔离。
//开发者不需要只关注JDBCAPI,关注不同数据库的驱动程序接口实现
class.forname (com.MySQL.JDBC.driver );
connection conn=driver manager.getconnection (URL,username,password );
适配器模式
不应该引入第三方库(hibernate,log4j ),直接在代码中继承或使用实体类。
需要提取高层统一接口,然后增加实现类,使接口暴露在外。
//代码与log4j紧密结合,不推荐使用
org.Apache.log4j.logger.getrootlogger ().info('info );
//基础可以自由交换log帧
FRLoggerFactory.getLogger ().info('info );
我推荐技术号码