定义:
  不要存在多于一个导致类变更的原因。通俗地讲,一个类只做一件事情。
 
单一职责原则的好处:
  1.类的复杂性降低,实现什么职责都有清晰明确的定义;
  2.可读性提高,复杂性降低,那当然可读性提高了;
  3.可维护性提高,可读性提高,那当然更容易维护了;
  4.变更引起的风险降低,变更是必不可少的,如果接口的单一职责做得好,一个接口修改只对相应的实现类有影响,对其他的接口无影响,这对系统的扩展性、维护性都有非常大的帮助。
 
建议:
  接口一定要做到单一职责,类的设计尽量做到只有一个原因引起变化
SRP好处:
  组织代码、减少脆弱、更松耦合、代码改变、维护性、易于测试、易于调试
哪些地方需要单一职责?
  方法、类、包、模块  
如何识别SRP被破坏?
  1.类有太多依赖 构造器有太多参数,意味着测试有太多依赖,需要制造mock模拟太多测试输入参数,通常意味着已经破坏SRP了
  2.方法有太多参数 类似类的构造器,方法参数意味着依赖
  3.测试类变得复杂 如果测试类有太多变量,意味着这个类有太多职责
  4.类或方法太长 如果方法太长,意味着内容太多,职责太多。一个类不超过200-250
  5.描述性名称 如果你需要描述你的类,方法或包,比如使用“xxx和xxx”这种语句,意味着可能破坏了SRP
  6.低聚合Cohesion类 低聚合特点:一个类有两个字段,其中一个字段被一些方法使用;另外一个字段被其他方法使用
  7.在一个地方改动影响另外一个地方 如果在一个代码地方加入新功能或只是简单重构,却影响了其他不相关的地方,意味着这个地方代码可能破坏了SRP
  8.猎枪效果Shotgun Effect 如果一个小的改变引起一发动全身,这意味SRP被破坏了
  9.不能够封装模块

架构师之路——单一职责原则SRP (我单纯,我快乐)的更多相关文章

  1. 电商架构设计-通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性

    个人观察 1.通过系统和业务拆分,遵循单一职责原则SRP,保障整个系统的可用性和稳定性. 2.单一职责原则SRP,真的很关键,广大程序员需要不断深入理解这个原则. 3.架构图是架构师的重要输出,通过图 ...

  2. C#软件设计——小话设计模式原则之:单一职责原则SRP

    前言:上篇C#软件设计——小话设计模式原则之:依赖倒置原则DIP简单介绍了下依赖倒置的由来以及使用,中间插了两篇WebApi的文章,这篇还是回归正题,继续来写写设计模式另一个重要的原则:单一职责原则. ...

  3. 【设计模式】单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  4. 【面向对象设计原则】之单一职责原则(SRP)

    单一职责原则是面向对象原则五大原则中最简单,也是最重要的一个原则, 他的字面定义如下: 单一职责原则(Single Responsibility Principle, SRP): 一个类只负责一个功能 ...

  5. 面向对象的六大原则之 单一职责原则——SRP

    SRP = Single Responsibility Principle   定义:就一个类而言,应该只有一个能引起他变化的原因.通俗的说,即一个类只负责一项职责.   作用: 1.减少了类之间的耦 ...

  6. 设计模式值六大原则——设计模式之六大原则——单一职责原则(SRP)

    定义: 应该有且仅有一个原因引起类的变更. There should never be more than one reason for a class to change. 优点: 1.类的复杂性降 ...

  7. 单一职责原则SRP

    定义: There should nerver be more then one reason for a class to change. 优点: 1.类的复杂性降低,实现什么职责都有清晰明确的定义 ...

  8. 2单一职责原则SRP

    一.什么是单一职责原则 单一职责原则(Single Responsibility Principle ): 就一个类而言,应该仅有一个引起它变化的 原因. 二.多功能的山寨手机 山寨手机的功能: 拍照 ...

  9. IOS设计模式的六大设计原则之单一职责原则(SRP,Single Responsibility Principle)

    定义 就一个类而言,应该仅有一个引起它变化的原因. 定义解读 这是六大原则中最简单的一种,通俗点说,就是不存在多个原因使得一个类发生变化,也就是一个类只负责一种职责的工作. 优点 类的复杂度降低,一个 ...

随机推荐

  1. mysql中游标的使用案例详解(学习笔记)

    1.游标是啥玩意?简单的说:游标(cursor)就是游动的标识,啥意思呢,通俗的这么说,一条sql取出对应n条结果资源的接口/句柄,就是游标,沿着游标可以一次取出一行.我给大家准备一张图: 2.怎么使 ...

  2. eclipse 标签标题乱码解决方法

    一般出现此类问题都是由于更改本地语言设置引起的. 解决办法: 1.恢复到原来默认的语言和地域 2.更改eclipse主题(Window-->preferences-->General--& ...

  3. 1.4.2.5. 测试(Core Data 应用程序实践指南)

    测试的方法也很简单: 首先,在AppDelegate.h里面引用CoreDataHelper @property (strong, nonatomic, readonly)CoreDateHelper ...

  4. JavaScript事件处理程序的3种方式

    最近这段时间因为每天要修改网站,为网站做特效,所以看了很多的js接触事件,自己只会使用一小部分,有时用的时候也比较混乱,现在系统的整理了一下,首先跟大家在马海祥博客上跟大家分享的是JavaScript ...

  5. Struts2拦截器介绍

    一.拦截器简介 Struts拦截器和Action的关系如图: 为了在使用拦截器时制定参数值,应通过<interceptor-ref -/>元素添加<param -/>子元素来为 ...

  6. Handler消息传递机制——Handler、Loop、MessageQueue的工作原理

    为了更好地理解Handler的工作原理,先介绍一下与Handler一起工作的几个组件. Message:Handler接收和处理的消息对象. Looper:每个线程只能拥有一个Looper.它的loo ...

  7. SVG的基础使用

    SVG的基础使用: <%@ page language="java" contentType="text/html; charset=UTF-8" pag ...

  8. 查看Eclipse版本号,及各个版本区别

    查看Eclipse版本号,及各个版本区别 参考:http://blog.csdn.net/gaojinshan/article/details/38903043 查看Eclipse版本号的方法:1.找 ...

  9. jQuery如何实现点击页面获得当前点击元素

    获得jquery对象: function foo(e){ var obj = $(e.target); }

  10. 基于basys2驱动LCDQC12864B的verilog设计图片显示

    话不多说先上图 前言 在做这个实验的时候在网上找了许多资料,都是关于使用单片机驱动LCD显示,确实用单片机驱动是要简单不少,记得在FPGA学习交流群里问问题的时候,被前辈指教,说给我最好的指教便是别在 ...