设计模式的六大原则之一:单一职责原则

本文深入探讨了单一职责原则(SRP)的基本概念与核心思想,并详细分析了SRP带来的诸多好处,包括提高代码组织性、降低脆弱性、实现更松耦合、简化重构过程、提升维护性和测试性等。

1、单一职责原则(Single Responsibility Principle,简称SRP )


  • 原始定义:There should never be more than one reason for a class to change。
  • 核心思想:应该有且仅有一个原因引起类的变更
  • 问题描述:假如有类Class1完成职责T1,T2,当职责T1或T2有变更需要修改时,有可能影响到该类的另外一个职责正常工作。

  • SRP好处
    • 组织代码
      让我们想象一个汽车修理工。 他使用很多工具​​一起工作。这些工具按类型分为:钳子,螺丝刀(十字/刀片),锤子,扳手(管/六角)等,他如何组织管理这些工具呢?他使用许多小抽屉将这些工具分门别类存放,这些抽屉其实类似模块作用,专门用来管理各种类。
    • 减少脆弱
      当一个类有多个理由需要修改时,它变得脆弱,在一个地方的修改会导致其他地方不可预期的后果。.
    • 更松耦合
      更多职责责任导致更高的耦合。
    • 耦合也是一种责任
      高度耦合导致高度依赖,意味着难以维护。
    • 代码改变
      对于单一职责模块重构更容易.
    • 维护性
      维护一个单一职责的类比维护一个铁板一块的类更容易。
    • 易于测试
      测试单一目标的类只需要很少的测试类。让“用测试替代文档” “self documentation by tests”变得更加容易
    • 易于调试
      在一个单一职责类找到问题是一件更容易的事情。

  • 哪些地方需要单一责任?
    • 方法
    • 模块

  • 如何识别SRP被破坏?
    • 类有太多依赖
      类的构造器有太多参数,意味着测试有太多依赖,需要制造mock太多测试输入参数,通常意味着已经破坏SRP了。
    • 方法有太多参数
      类似类的构造器,方法参数意味着依赖。
    • 测试类变得复杂
      如果测试有太多变量,意味着这个类有太多职责。
    • 类或方法太长
      如果方法太长,意味着内容太多,职责过多。
      一个类不超过 200-250
    • 描述性名称
      如果你需要描述你的类 方法或包,比如使用"xxx和xxx"这种语句,意味着可能破坏了SRP.
    • 低聚合Cohesion的类
      聚合Cohesion是一个很重要的概念,虽然聚合是有关结构概念,但是聚合和SRP非常相关,如前面论坛案例,如果一个类不代表一个高聚合,意味着低凝聚low Cohesion,它就可能意味破坏SRP。一个低凝聚的特点:一个类有两个字段,其中一个字段被一些方法使用;另外一个字段被其他方法使用。
    • 在一个地方改动影响另外一个地方
      如果在一个代码地方加入新功能或只是简单重构,却影响了其他不相关的地方,意味着这个地方代码可能破坏了SRP.
    • 猎枪效果Shotgun Effect
      如果一个小的改变引起一发动全身,这意味SRP被破坏了。
    • 不能够封装模块
      比如使用Spring框架,你使用@Configuration or XML 配置,如果你不能在一个配置中封装一个Bean。意味着它有太多职责,Spring配置应该隐藏内部bean,暴露最少接口,如果你因为多个原因需要改变Spring配置,可能破坏了SRP.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值