应届程序员,几年的辩证唯物主义哲学爱好者谈谈对高内聚、低耦合的理解。
理解一个事物,需要从两个方面去理解。
一个是“世界观”,一个是“价值观”。
世界观,即某个事物包含了什么客观规律;价值观,即事物对人有什么价值。
先谈价值观,对于万事万物,它们有一些普通而又特殊的属性。普通在于从科学的角度,它们是必然、的固有的,从这个角度它们是一样的。而有一个特殊的属性,那就是“生存属性”。世界万物是发展变化的,从低级到高级(社会形态、科学技术等),从不稳定到稳定(物质形态)。世界万物的发展是有一定方向的,事物具有的一些普通而又特殊的属性让其存在下来。
对于软件系统,这种属性就是,满足人类的需求,让其能“存在下来”的属性。那就是人类对软件系统的需求,功能强大、易于扩展(修改容易)、帮助减少劳动。
“世界观”方面,低内聚、高耦合是客观在很多方面能满足人类对软件的上述需求的。
高内聚:系统的架构的完整尽可能少的依赖外部资源。
目的:单个系统的维护、运行等尽可能低的影响、依赖于外部其它系统。
低耦合:系统内部各个模块间的依赖关系尽可能的低。
目的:各个模块的维护的影响的范围小,整个系统的灵活性提高(系统的改变,即各个模块的增、删、改容易),降低系统的维护成本,能尽可能的提高系统的多功能性。
原因:系统变更成本低,具备实现多功能的条件。
简单来说就是能满足人类的“贪”、“懒”的需求,又满足客观规律。
举个mybatis等数据库操作封装的技术的例子。
原始的方式,SQL语句模块(或者说系统)对于其它部分的依赖很大,具体业务决定了它的结构,换个业务它就得改变结构,不再可用。
简单来说就是,对于整个系统,SQL语句模块和业务模块两个内部子模块依赖度过高,不满足系统内部子模块的低耦合。
对于SQL语句模块来说,他不是高内聚的,它的架构依赖于外部的业务逻辑。