博客
关于我
面向对象设计原则 单一职责原则(Single responsibility principle)
阅读量:398 次
发布时间:2019-03-05

本文共 783 字,大约阅读时间需要 2 分钟。

单一职责原则(SRP:Single responsibility principle)

 

又称单一功能原则,面向对象的基本原则之一。它规定 一个类应该只有一个发生变化的原因。

该原则由罗伯特·C·马丁(Robert C. Martin)于《敏捷软件开发:原则、模式和实践》一书中给出。

 

但实际上我们很容易明白他的意思,却很难真正的理解它。

所谓职责是指类变化的原因。如果一个类有多于一个的动机被改变,那么这个类就具有多于一个的职责。

而单一职责原则就是指一个类或者模块应该有且只有一个改变的原因。

 

如果我们有一个 DAL 类,那 DAL 类变化的原因有多少呢?

比如我搜索的时候要加一个字段,比如我删除要多删一些子记录,那么这算不算是不同的职责呢?

当然算,一个是查询,一个是删除,这不是两个截然不同的职责吗?

 

这是我们站在这个DAL的角度上来说,假如们站在 BLL 的角度来看呢?

那 DAL 类的职责就只有一个了,那就是负责实体的各种数据库交互了。

 

一个类,只有一个引起它变化的原因。应该只有一个职责。

每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起。

这会导致脆弱的设计。当一个职责发生变化时,可能会影响其它的职责。另外,多个职责耦合在一起,会影响复用性。

 

这个时候我们说的职责,其实应该是站在类的外部,也就是调用者来看的角度。

比如我们上面举的例子,不会有人把四种数据库动作分在四个类中去写吧。

 

所以可以说

  • 类的职责是站在外部调用的角度来看的。
  • 一个类的职责应该是一组紧密相关的功能。

 

其实就是 一个类只负责一组相关的事情。

很多程序员都是黑就是黑,白就是白的思维。

其实呢 很多原则不是打死一定要遵守的,重点还是我们要具体情况具体分析,该让它单一的时候单一,该耦合的时候耦合。

只要最终以实用有用为目的,就没有错误的设计。

转载地址:http://awozz.baihongyu.com/

你可能感兴趣的文章
MySQL —— 视图
查看>>
mysql 不区分大小写
查看>>
mysql 两列互转
查看>>
MySQL 中开启二进制日志(Binlog)
查看>>
MySQL 中文问题
查看>>
MySQL 中日志的面试题总结
查看>>
mysql 中的all,5分钟了解MySQL5.7中union all用法的黑科技
查看>>
MySQL 中的外键检查设置:SET FOREIGN_KEY_CHECKS = 1
查看>>
Mysql 中的日期时间字符串查询
查看>>
mysql 中索引的问题
查看>>
MySQL 中锁的面试题总结
查看>>
MySQL 中随机抽样:order by rand limit 的替代方案
查看>>
MySQL 为什么需要两阶段提交?
查看>>
mysql 为某个字段的值加前缀、去掉前缀
查看>>
mysql 主从
查看>>
mysql 主从 lock_mysql 主从同步权限mysql 行锁的实现
查看>>
mysql 主从互备份_mysql互为主从实战设置详解及自动化备份(Centos7.2)
查看>>
mysql 主从关系切换
查看>>
MYSQL 主从同步文档的大坑
查看>>
mysql 主键重复则覆盖_数据库主键不能重复
查看>>