15 | 理论一:对于单一职责原则,如何判定某个类的职责是否够“单一”?
该思维导图由 AI 生成,仅供参考
如何理解单一职责原则(SRP)?
- 深入了解
- 翻译
- 解释
- 总结
本文深入探讨了类的单一职责原则(SRP)及其在实际应用中的复杂性。作者首先介绍了SRP的定义和应用,强调了类应该具有粒度小、功能单一的特点。通过实际例子阐述了当一个类包含多个不相关的功能时,需要将其拆分成更加单一、粒度更细的类。文章还提到了评价类职责单一性的一些指导原则,如类中代码行数、函数或属性过多、类依赖其他类过多等。作者强调了在不同业务层面看待类的设计,对类的职责是否单一会有不同的认识。最后指出了在软件开发中,类的设计应该满足业务需求,随着业务发展逐步进行持续重构。总的来说,本文深入浅出地解释了类的单一职责原则,为读者提供了一些实用的判断原则和技巧。文章通过具体例子阐述了拆分类的职责可能带来的新问题,强调了在判断类的职责单一性时需要综合考虑不同因素,以及单一职责原则的适用范围和局限性。文章内容丰富,逻辑清晰,对于软件开发人员和技术爱好者来说具有很高的参考价值。
《设计模式之美》,新⼈⾸单¥98
全部留言(215)
- 最新
- 精选
- Luciano李鑫想请教一下争哥,关于代码代码持续重构的问题,所引出的额外测试、发布成本,和故障风险应该怎样平衡呢。
作者回复: 我推荐持续重构,不推荐等到代码烂到一定程度之后的大刀阔斧的重构。持续重构就像开发一样,是开发的一部分,所以也不存在额外的测试、发布成本之说,你就当成开发来看就行了。后面会讲到重构,你到时候再看下是否还有疑问。
2019-12-061267 - 一壶浊酒老师您好,有个问题想请教下,就是您举的UserInfo的例子,在抽取了地址相关的信息到新的类的时候,原来的userinfo类中需要再添加一个新的类的属性在里面么?感觉如果根据单一职责原则了话,新的类应该独立出来,UserInfo里应该不包含该类,那在这种情况下数据库的表一般会出现变化么?不然是否会造成一个新增的用户会在保存用户信息的时候对数据库进行两次操作?一次新增用户信息,然后获取了userId再进行一次操作修改地址相关信息?还是说在userinfo中存在新的地址相关类的属性,进行直接新增操作?因为没有这方面的实际经验,所以对这个比较疑惑。老师遇到这种情况一般作何处理
作者回复: 数据库跟业务代码的设计不是强耦合的。不然,对业务代码进行重构,那数据库还得跟着改,谁还敢重构啊。 不管userinfo是否有address的信息,我们都可以转化成数据库想要的数据格式,再一次性地写入到数据库中。 userinfo是否包含address的信息?理论上,既然已经拆出来了,职责单一了,就不必要包含了。
2020-01-05442 - Jxin回答问题: 1.不好说,职责单一这东西比较主观。得看自己对抽象出来的类的主观定义是什么。准的捏不住,但还是要把控一下范围的。 2.码出高效给出了方法行数不超过50行的一个基准标注。而我实践下来很难写出超过50行的方法,这50行还包括了大量注释。 3.方法的职责单一,业务领域的能力要单一(边界清晰)。 提问: 1.以前不代码规范不行,就逼着自己多思考,多写注释。现在养成了写注释的洁癖,不写就很难受。请问大佬,这怎么办,需要戒掉吗。我除了dao层的crud和数据类的setget外,其余方法都会带上注释。
作者回复: 哈哈,写注释不是挺好的吗?我后面讲到编程规范的时候会详细讲如何写注释的。
2019-12-061214 - 蚂蚁内推+v有个问题,比如有个OrderService中可能提供了各种订单查询、操作等,即一个OrderService有多个方法,是否符合SRP呢?
作者回复: 一个service当然可以有多个方法了,只要方法都是一个业务领域的,没有明显违背SRP,实际上都是合理的。
2019-12-09310 - 刘学习来学习前段时间需要对外提供sdk,最开始的设计就是根据职责定义了多个client对象供其他系统调用,后来角色不是很友好,最后还是提供了个聚合类,将所有的接口都集中到一起对外提供了,像这种情况,有的时候不知道该参考什么来设计
作者回复: 后面facade设计模式会讲到你的问题
2020-01-075 - 空也空“私有方法过多”为什么作为一个衡量标准呢?
作者回复: 你这个问题确实是个好问题,我想想~
2020-04-1054 - Cris老师,我今天听到了一个概念叫面向切片编程(aop),它和面向对象编程有什么联系呢?想听听老师的理解
作者回复: 这两个没有关系的,你可以看下spring的aop
2019-12-0732 - tuyu小争哥, 数据库设计是不是不太适合设计那种抽象类的数据库表结构, 这样我写bo就会就会维护的很大很大
作者回复: 没太看懂你说的😂
2020-01-0121 - 刘同青老师,您好,我工作中遇到的就是面向过程编程,一个接口中只有一个方法,对应一个实现,然后通过dubbo rpc调用。。。请问如果一个接口中很多个方法,那实现类不就很复杂了么?
作者回复: 一个接口只有一个方法,这种设计不常见吧,除非框架限制,有特殊要求,才会这么做。
2020-05-06 - L你好,我想问下如何在spring mvc下使用设计模式,或者说在框架下如何使用设计模式
作者回复: 使用设计模式跟spring mvc或者其他框架关系不大哈,还是聚焦于你的业务是否需要使用设计模式
2019-12-062