【设计原则篇】聊聊单一职责原则

因为是刚开始写软件设计相关的文章,这里先大概介绍下,软件设计相关的知识图谱。大概分类的话,

编程范式

软件设计相关原则

  • Don't Repeat Yourself (DRY)
  • Keep It Simple, Stupid(KISS)
  • Program to an interface, not an implementation
  • You Ain't Gonna Need It (YAGNI)
  • Law of Demeter
  • 面向对象的 S.O.L.I.D 原则
    面向对象设计
    设计模式
    编程规范
    代码重构

从本篇开始,主要先介绍下SOLID五大原则,剩余的设计模式、编程范式 有时间在进行学习整理。

软件设计的本质是设计出可拓展、高质量、可读、可维护的代码

单一职责原则(SRP)是什么

单一职责原则是 Single Responsibility Principle SRP,一个类或者模块只负责一个职责。其实说白就是一个类只应该负责一件事情,这样的话,就可以减少不必要的变化。将类拆分成更加单一、粒度更细的类。

比如一个用户类,但是对应有一些用户的基础信息等,这个时候,我们应该拆分成两个类,一个是用户注册类 User,只保存一些身份证、手机号信息,另外应该有一个User_Info类,保存用户的基本信息。比如身份证照片、地址等等信息。
单一职责原则是为了实现代码高内聚、低耦合、提高代码的复用性、可读性、可维护性

如何判断类是否单一

比如还是以上面的User类来说,如果说在业务前期,那么其实可以在一个用户类中保存所有用户相关的信息,但是随着业务扩张,用户其他信息其实可以进行抽离出来,比如做成一个单独的用户中心,提供整个系统进行使用。所以类是否单一其实需要结合方式的业务场景进行判断。包括在后期的时候进行业务重构。

包括在实际的开发中,接手的一个项目并没有使用Spring进行开发,而是全部new对象的方式,导致某几个类 基本上包含了全部的核心逻辑,差不多有几千行代码,但是也没人敢进行修改,因为变化的话 可能导致别的问题出现。这种其实就需要进行重构。将类进行拆分,按照不同的逻辑功能,拆分成不同的类以及函数功能。

一般来说,如果类的代码行数过多、属性、函数过多,就需要拆分。依赖的类过多等。其实归根结底要理解分离关注点。

不同行为负责的代码放到不同的地方,这样就可以将变化尽可能的聚焦。

小结

关于单一职责原则,其核心的思想是:一个类,只做一件事,并把这件事做好,其只有一个引起它变化的原因。单一职责原则可以看作是低耦合、高内聚在面向对象原则上的引申,将职责定义为引起变化的原因,以提高内聚性来减少引起变化的原因。

职责过多,可能引起它变化的原因就越多,这将导致职责依赖,相互之间就产生影响,从而极大地损伤其内聚性和耦合度。单一职责,通常意味着单一的功能,因此不要为一个模块实现过多的功能点,以保证实体只有一个引起它变化的原因

相关推荐
萤火虫Coding6 天前
SOLID原则-单一职责原则
设计模式·设计原则·单一职责原则·solid
邮专薛之谦18 天前
Java设计模式六大原则
java·接口隔离原则·开闭原则·单一职责原则·六大原则
蜡笔小新..1 个月前
【设计模式】软件设计原则——开闭原则&里氏替换&单一职责
java·设计模式·开闭原则·单一职责原则
小哇1232 个月前
如何划分类/单一职权原则SRP
单一职责原则
千年奇葩2 个月前
Unity SRP 可编程渲染管线的基本用法
unity·单一职责原则·srp
激昂~逐流2 个月前
单一职责原则介绍
单一职责原则
要记得喝水2 个月前
软件设计原则之单一职责原则
开发语言·windows·c#·.net·visual studio·单一职责原则
勤劳兔码农3 个月前
单一职责原则与REST API设计:如何定义清晰的资源与职责
单一职责原则
不爱学习的啊Biao3 个月前
设计模式六大原则(一)–单一职责原则(C#)
c#·单一职责原则
范范08253 个月前
单一职责原则在微服务中的应用:服务分解与职责明确
java·微服务·单一职责原则