【问题标题】:Single Responsibility principle : How to determine the number of responsibilities a class is having?单一职责原则:如何确定一个类的职责数量?
【发布时间】:2014-07-03 16:21:38
【问题描述】:

我正在研究 SRP 原则。它指出一个类应该只有一个更改原因,这隐含地暗示它应该有一个单一的责任。

我有点困惑,开发人员如何确定一个类是否只有一个职责?

如果一个类有一个 PUBLIC 方法(带有多个私有方法),那么它是否被称为具有单一职责。

【问题讨论】:

    标签: solid-principles single-responsibility-principle


    【解决方案1】:

    SRP 是原则而非规则。

    责任或更改理由是指一个人有理由在设计时更改代码。它并不是指有理由在运行时更改的对象。

    因此,例如,如果有人希望 UI 上的按钮移动,则视图类将有理由更改。如果有人想更改数据库架构,则数据库访问类将有理由更改。

    想象一下,如果视图和数据库访问在同一个类中完成,那将是多么可怕。

    原则是隔离部分代码,以便可以在不同区域独立进行更改(例如视图和数据库访问)。如果多个开发人员同时在代码库上工作,这将非常有用。对单个开发人员进行更改时不要破坏其他区域也很有用。

    这是原则而非规则。在实践中,如果你足够近地眯着眼睛看课程和模块,它们通常会有多种改变的理由。原则是真正减少这种情况,取出唾手可得的果实,而不是虔诚地清理代码库。

    【讨论】:

      【解决方案2】:

      责任是关于用户使用系统的,问问自己“如果用户想要改变它”它还需要影响什么,那么它还会影响什么。

      例如,如果我有一个带有“添加课程方法”和“保存”方法的“学生”对象,

      向学生添加新课程不需要影响学生数据的保存方式,但如果我更改了“添加课程”方法,我需要重新编译和重新部署与保存学生相关的所有内容,假设是实现为数据库。

      如果我想将数据库单独部署到学生数据结构中,或者将学生保存在不同类型的数据库中,或者可能是配置文件,那就更糟了。这两件事现在是耦合的,并且变得僵化了。

      关心数据库的用户会受到关心学生的用户的影响。

      因此,如果您想确定该类是否有一项责任,最好的办法是询问如果您调用它的方法会受到什么影响。

      许多只有一种职责的类也只有一种方法,但其他类不会,这绝对不是必需的。

      来源:

      Object Mentor

      Clean Coder videos Ep. 9

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多