【Java进阶学习】面向对象设计原则—“高内聚、低耦合;多聚合,少继承”

判断一个程序的设计是否设计得当、易于后期变更维护,在于是否编程符合“高内聚、低耦合;多聚合,少继承”的原则。作为一个进阶的程序员,需要在设计程序接口,加入这些优秀的经验总结。

先弄清楚以下几个概念:

 

1.模块:从逻辑上将系统分解为更细微的部分,将复杂的功能拆分成细分的功能。模块的粒度可大可小,可以是函数、类(常见的如DTO\Service\Controller)、功能块、子系统、微服务等。

 

2.内聚:主要描述的是模块内部的成员关系。

高内聚,就是将成员之间关联性强的放在一个模块中,能够在模块内部中独立完成某个单一功能。对于扩展、维护都更友好。

高内聚-例:

在设计用户相关的业务类时,我们通常的做法会把创建用户、查看/修改用户信息、忘记密码等有关的方法归纳在同一个DTO类中,并不会分散在多个DTO中,在用户Service类中调用这些方法。

 

3.耦合:主要描述的是模块与模块之间的关系。若模块之间存在的依赖,对模块改动会相互影响。

低耦合,即需要尽量减少模块之间的依赖关系,关联逻辑要尽量简单。一般在模块之间发生跨模块数据操作的视为高耦合,跨模块进行数据查看为低耦合。

低耦合-例:

电商系统中,设计订单Service类中有需要使用户DTO的方法,订单Service类一般只需要查看用户的一些基本信息(用户姓名、电话、地址等),只需要在订单Service类中引入用户DTO,使用其查询方法,而不会在订单Service类中定义一个修改用户信息的方法。

比较常见的DTO类,一般都只涉及某个单一的功能,需要高内聚;而Service类,有可能依赖多个DTO类,需要低耦合。

多聚合、少继承:主要针对在类的设计上,多定义类的属性,而尽量避免使用继承使类获得某种特性。具体体现在:如果类A需要具有类B的某个特性,将类B作为类A的属性成员,而不是通过继承获得。(在设计模式中对应装饰者模式)

更深入学习“高内聚、低耦合”细分场景,可以查看https://blog.csdn.net/kingscoming/article/details/78836229。此文只在于讲清楚该设计原则的概念,不列举各种使用场景。

讲到设计原则时,结合接口设计原则也是非常有必要的,这些原则也是符合“高内聚低耦合”原则的,能加深理解。当谈到接口设计原则时,应该考虑以下几点:

1.单一职责原则:一个类只负责一个功能领域中某个子功能,只承担这个子功能的相应职责;

2.开闭原则:一个软件实体应该对扩展开放,对修改关闭

3.里氏替换原则:所有引用父类的地方,能够替换成其子类对象

4.依赖倒转原则:针对接口编程,而不是针对实现编程。实现细节应该依赖于抽象接口。(对应设计模式中的策略模式)

5.接口隔离原则:使用多个专门的接口,而不使用单一的总接口。

6.迪米特原则:一个软件实体应当尽可能少地与其他实体发生互相作用(对应设计模式中的外观模式、桥接模式、适配器模式)

我个人的理解,“高内聚、低耦合;多聚合,少继承”是软件设计的总原则,而接口设计原则也是为了达到这个总原则而细分的、可以在编程层面上有具体的实践指导原则。另外在具体实现上应该如何操作,还需要深入理解设计模式。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值