单一职责原则-敲代码你不能只自己爽,大家爽才是真的爽

简介: 单一职责原则-敲代码你不能只自己爽,大家爽才是真的爽

简介


单一职责原则(Single Responsibility Principle,简称SRP),指的是不要存在一个以上导致类变更的原因。

There should never be more than one reason for a class to change.


单一职责原则的优点


类的复杂性降低,清晰定义类的职责

可读性提高、复杂性降低

可维护性高

有效降低变更的风险;如果一个接口的单一职责做的好,一个接口修改只对响应的实现类有影响,对其他的接口无影响,这样会大大降低变更的风险

单一职责原则使用场景


模块

接口、类

方法

单一职责原则解决实际问题

使用场景


做过项目的人都接触过项目中的人员和资源权限问题,基本上都是采用RBAC模型(Role-Based Acess Control)基于角色的访问控制,通过分配和取消角色来完成用户权限的授予和取消,是的用户(动作主体)和权限(资源的行为)分离。

此时我们需要定义一个用户接口IUserInfo,假如我们将用户管理、修改用户信息、角色管理等信息都封装到这个接口当中。那么此时的接口定义将会如下所示:

image.pngimage.png这里有一个非常明显的缺点就是,我们将用户的基本属性处理和用户的行为处理放到了一个接口中维护,这样直接导致将用户的基本属性或者用户的行为发生变更的时候,都会导致我们的IUserInfo接口和UserInfo实现类都会发生改变,这种设计不仅增大了系统的耦合度也给项目维护带来了更高的维护成本,是非常不可取的。


解决办法


我们将IUserInfo接口抽象为两个接口,分别是用户属性相关接口IUserBO,行为相关接口IUserBiz,修改后的代码如下所示:


IUserBO接口定义

/**
 * <p>
 *      用户属性相关(Business Object)
 * </p>
 *
 * @Author: Liziba
 * @Date: 2021/6/20 11:11
 */
public interface IUserBO {
    void setPassword(String password);
    String getPassword();
    void setUserName(String userName);
    String getUserName();
    void setAddress(String address);
    String getAddress();
}

image.pngimage.png此时的UserInfo对象,既可以当做IUserBiz对象,也可以当做IUserBO对象,因为UserInfo分别实现了IUserBiz接口和IUserBO接口。此时的IUserBiz接口和IUserBO接口是满足单一职责原则的,因为他们分别负责的是用户属性相关和用户行为相关的职责,并不相互耦合交叉。

image.png单一职责原则总结


单一职责原则不仅仅适用于接口,对于类、方法乃至包或者模块都应该遵守单一职责原则的设计,如果设计完全不吻合单一职责原则,不仅会给后续开发和维护带来高额成本也非常不利于开发本人对于系统设计和架构思维方式的提升。我们在开发一个项目不仅仅是一个的事情,尽量要往多一步多一版本思考,不能只快乐自己而给他人埋下太多定时炸弹。但是话又说回来,要想做到一个系统或者一个模块中的全部接口、类和方法完全符合单一职责原则,这基本上也是不可能的事情,大多数情况下,单一职责原则的设计会导致接口、类和方法的剧增,此时我们在设计的时候就应该多方面的去考虑了;总之,我们最少要做到一个接口只搞一件事,也就是建议接口一定要做到单一职责原则设计,而其他的也尽量要往这方面靠。


目录
相关文章
|
3天前
|
算法 程序员 C#
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
程序员也可以很浪漫!这样的一款表白代码收藏馆项目,即使小白也可以使用,发给你的对象试试!
|
10月前
编程要搞明白的东西(一)
编程要搞明白的东西(一)
54 0
|
9月前
|
SQL 人工智能 Java
程序员:你见过哪些要命的奇葩代码?
程序员:你见过哪些要命的奇葩代码?
82 0
|
10月前
|
程序员 开发者
对程序员来说最重要的小事——整洁代码
对程序员来说最重要的小事——整洁代码
99 0
|
10月前
|
Java
编程要搞明白的东西(二)
编程要搞明白的东西(二)
64 0
|
编解码 前端开发 程序员
为啥只跟着视频敲代码学不好编程?
为啥只跟着视频敲代码学不好编程?
310 1
|
Web App开发 搜索推荐 开发者
上了学这么久,我才知道他们为什么可以这么爽(上)
目录 前情提要 安装插件 1.下载链接 2.安装 遇到无法拖进去怎么办? 3.新的体验
上了学这么久,我才知道他们为什么可以这么爽(上)
|
设计模式 Java 程序员
别在再满屏的 if/ else 了,试试策略模式,真香!!
比如说对象的某个行为,在不同场景中有不同的实现方式,这样就可以将这些实现方式定义成一组策略,每个实现类对应一个策略,在不同的场景就使用不同的实现类,并且可以自由切换策略。
244 0
别在再满屏的 if/ else 了,试试策略模式,真香!!
|
程序员
为程序员撸点闲话
终于忙完了第一个996,啊,每天下班回家跟家人团聚是多么开心的事情,说正事,别哔哔。 为何放着之前好好的项目经理不做,跑去干开发去了?谁说开发不如项目经理了?谁说开发就比项目经理低一级了?没有做一线做开发的,哪有项目经理什么事儿? 先为项目经理简单哔哔一下:压力真心大,俗称背锅侠,计划永远在变,客户永远在变,需求永远在变,唯一不变的你必须时刻保持欢笑,不然就卷铺盖走人.....   程序员,这三个字,在大部分非IT技术工作人的眼里:古板、没情调、单身狗、钻牛角尖、不会打扮、不会聊天、不会这、不会那......除了好听的名词,不好听的名词基本都可以安放在这个职业身上。
1088 0