• 深入理解单一职责原则(Single Responsibility principle )


    单一职责

    用于控制类的粒度大小

    单一职责的定义

    1.一个对象应该只包含单一的职责,并且该职责被完整的封装在一个类中。

    另外一种定义方式:就一个类而言,应该仅有一个引起它变化的原因。

    为什么要是用单一职责,什么情况下需要使用单一职责

    由于单一职责是用来控制类得到粒度大小,所以我们在进行类的设计阶段的时候,就需要将我们设计的类,符合我们的单一职责。

    单一职责是实现高内聚,低耦合的指导方针。

    在软件系统中,一个类(大到模块,小到方法)承担的职责越多,他被复用的可能性就越小,而且一个类承担的职责过多,相当于将这些职责都耦合在一起,当我们类中的职责很多很多无限多的时候,当其中一个职责发生变化的时候,很可能会影响到其他的职责。因此我们需要将不同的职责分开,将不同的职责分别封装在不同的类中。及将不同变化的原因封装在不同的类中,也可以将同时间发生变化的职责封装在同一个类中(一个类中方法的互相调用)

    示例

    某公司开发人员对客户关系管理系统中客户信息图形统计模块,提出了如图的初步设计方案:
    在这里插入图片描述
    在CustomerDataChart类中,getConnection()方法用于连接数据库,findCustomers()方法用于查询所有客户的信息,createChar()、displayChart()这两个方法分别用于创建图标和展示图标。
    现在需要使用单一职责进行重构。

    我们可以看到在CustomerDataChart类中,封装了太多的方法,既有连接数据库、又有对数据进行操作的方法,还有对图标创建和展示的方法。
    如果我们在其他类需要用到数据库连接的方法,或者是图表的创建和展示等方法,那么会难以复用。
    如果后期我需要修改连接数据库的方法,或者是修改findCustomers()方法都会去修改这个类,那么这个类就有不止有一个引起它变化的原因。显然不符合单一职责原则。

    使用单一职责进行重构

    在这里插入图片描述
    重构之后,拆分为了三个类
    CustomerDataChart类负责图表的创建和展示。
    CustomerDAO类负责操作Customer表对他进行增删改查
    DBManagement类负责连接数据库。

  • 相关阅读:
    DAC、ADC、FFT使用总结
    C++(20):自动join的jthread
    20221128今天的世界发生了什么
    当变速箱密封件损坏时会发生什么?
    zookeeper本地部署和集群搭建
    陕西直销系统开发如何让别人听你讲?
    产品第一次兼项目经理积累了经验也踩过坑
    系统架构师案例分析(真题知识点整理、记忆)
    软件项目管理 7.4.5.进度计划编排-敏捷计划
    QT 按钮的工具提示tooltips设置字体大小颜色与背景
  • 原文地址:https://blog.csdn.net/wangwei021933/article/details/126437009