zoukankan      html  css  js  c++  java
  • 设计原则-SRP单一职责原则

    1.定义

     任何一个类或者模块都应该只对某一个或一类行为者负责。

    也就是说不要设计大而全的类,要设计粒度小、功能单一的类。换个角度来讲就是,一个类包含了两个或者两个以上业务不相干的功能,那我们就说它职责不够单一,应该将它拆分成多个功能更加单一、粒度更细的类。

    2.分析

    为什么要遵循单一职责原则?

    1)减少脆弱

    当一个类有多个理由需要修改时,它变得脆弱,在一个地方的修改会导致其他地方不可预期的后果。

    2)更松耦合

    更多职责责任导致更高的耦合,高度耦合导致高度依赖,意味着难以维护。

    3)代码改变

    对于单一职责模块重构更容易。

    4)维护性

    维护一个单一职责的类比维护一个铁板一块的类更容易。

    5)易于测试

    测试单一目标的类只需要很少的测试类。

    6)易于调试

    在一个单一职责类找到问题是一件更容易的事情。

    如何判断违反单一职责原则?

    1)类有太多依赖

    2)方法有太多参数

    3)类或者方法太长

    如果方法太长,意味着内容太多,职责过多。

    4)名称不能用一个词来描述

    如果你需要描述你的类 方法或包,比如使用"xxx和xxx"这种语句,意味着可能破坏了SRP。

    3.案例

    一个类的三个函数分别对应的是三类不同的行为者。使三类行为者的行为耦合在了一起,这可能会导致CFO团队的命令影响到COO团队所依赖的功能。

    假设一种情况,calculatePay()方法和reportHours()方法使用相同的逻辑来计算正常工作时长,程序员为了避免重复编码,将该算法单独实现为一个名为regularHours的方法。当CFO团队修改了regularHours方法,但不知道reportHours方法也调用了regularHours方法,同时也影响了COO团队的功能。

     

     改正的方法是,变成三个类,每个类只包含与之相关的函数代码,互相不可见,这样就不存在互相依赖的情况了。三个类共同使用一个不包括函数的、简单的数据类。

    缺点是,使用者需要在程序里处理三个类。使用Facade设计模式来统一对外公布。

  • 相关阅读:
    时序图和类图
    word文档一个表格分割成两个表格
    Spring 报错:Error creating bean with name
    怎么让线条快速选中并组合多个形状
    [扩展阅读] Python 函数修饰符(装饰器)的使用
    第039 类和对象 拾遗
    吴恩达深度学习 第一课第三周课后编程作业
    第038讲:类和对象:继承 课后测试题及答案
    廖雪峰Python教程--使用模块
    第037讲:类和对象:面向对象编程
  • 原文地址:https://www.cnblogs.com/windpoplar/p/12724391.html
Copyright © 2011-2022 走看看