本文是由敏捷宣言签署人之一、《 Clean Code(代码整洁之道)》一书的作者Robert C. Martin为他的《Applying Principles and Patterns》这本书搜集整理而来。

单一责任原则(SRP)

只有一个理由去修改一个类。例如,如果一个业务规则的改变会导致这个类的修改,那么,数据库、界面、报表格式或系统任何其它的部分的改变都不该迫使这个类做修改。

  • http://davidhayden.com/blog/dave/archive/2005/05/29/1066.aspx
  • http://c2.com/cgi/wiki?SingleResponsibilityPrinciple
  • 《Head First 设计模式》 第 185, 336, 339, 367 页
  • http://msdn.microsoft.com/en-us/magazine/cc546578.aspx
  • http://codebetter.com/blogs/david_laribee/archive/2008/09/09/why-solid-gimme-an-s.aspx

开发/关闭原则(OCP)

软件构成(类,模块,方法等)向扩展行为开放,向修改行为关闭。

  • http://davidhayden.com/blog/dave/archive/2005/06/04/1096.aspx
  • http://en.wikipedia.org/wiki/Open/closed_principle
  • 《Head First 设计模式》第 86-87, 407 页
  • http://c2.com/cgi/wiki?OpenClosedPrinciple
  • http://codebetter.com/blogs/david_laribee/archive/2008/09/11/why-solid-gimme-an-quot-o-quot.aspx

Liskov替换原则(LSP)

子类必须能够用来当作基类使用。如果类A继承类B,任何能使用A的地方,B也同样可以使用。例如,是否还记得,正方形可以看作是矩形!当进行扩展时:前提条件不许绕过,后置条件不能放宽限制,可见常量不能被修改(?)。常量:在扩展之前或之后,用户都需要依靠这个常量来传递信息。正确的使用set形式的继承关系。不遵守set语义是非常危险的。归纳:使用超类的引用的任何上下文中也可以使用其子类的引用替代。这个原则极大的限制了在纯扩展(继承)机制里可以做的事情。不遵守会带来风险。

  • http://davidhayden.com/blog/dave/archive/2005/06/10/1226.aspx
  • 《敏捷软件开发——原则、模式与实践》 页码 ?
  • http://c2.com/cgi/wiki?LiskovSubstitutionPrinciple
  • http://en.wikipedia.org/wiki/Liskov_substitution_principle
  • http://javaboutique.internet.com/tutorials/JavaOO/
  • http://codebetter.com/blogs/david_laribee/archive/2008/09/22/why-solid-gimme-an-l.aspx

接口分离原则(ISP)

一个类对另一个类的依赖应该限制在最小化的接口上。

  • http://davidhayden.com/blog/dave/archive/2005/06/15/1482.aspx
  • http://c2.com/cgi/wiki?InterfaceSegregationPrinciple
  • http://www.google.com/search?q=interface+segration+principle
  • http://doodleproject.sourceforge.net/articles/2001/interfaceSegregationPrinciple.html

反向依赖原则(DIP)

依赖抽象层(接口),而不是具体类。

  • http://davidhayden.com/blog/dave/archive/2005/06/10/1261.aspx
  • http://en.wikipedia.org/wiki/Dependency_inversion_principle
  • 《Head First 设计模式》第 139-143 页
  • http://c2.com/cgi/wiki?DependencyInversionPrinciple

其它重要原则

Demeter定律

也被称做封锁信息原则:只跟朋友交流

一个对象O的任何一个方法M只能调用下列类型的对象的方法:

  • 它自己
  • 它的参量
  • 它创建/实例化的对象
  • 它的直接组件对象

参考

  • http://en.wikipedia.org/wiki/Principle_of_Least_Knowledge
  • http://ctrl-shift-b.blogspot.com/2008/06/distilling-law-of-demeter.html
  • 《Head First 设计模式》第 265 页

好莱坞原则

不要调用我,我会调用你的。

  • http://en.wikipedia.org/wiki/Hollywood_Principle
  • 《Head First 设计模式》第 296 页

不要自我重复(DRY)

去掉重复代码。

  • 《程序员修炼之道》(Pragmatic Programmer) 第 27 页
  • http://en.wikipedia.org/wiki/Don%27t_repeat_yourself
  • http://c2.com/cgi/wiki?DontRepeatYourself

对接口编程,而不是对实现

反向依赖的另外一种说法。

  • 《Head First 设计模式》第 11, 110-111, 243, 335 页
  • http://www.artima.com/lejava/articles/designprinciples.html

你不需要它(YAGNI)

不要添加你“认为以后可能有用”的代码。只在“事到临头”时才添加代码。

  • http://c2.com/xp/YouArentGonnaNeedIt.html
  • http://en.wikipedia.org/wiki/You_Ain%27t_Gonna_Need_It

简单化,傻瓜化(KISS)

让它能工作的最简单的方法是什么?

  • http://c2.com/cgi/wiki?DoTheSimplestThingThatCouldPossiblyWork
  • http://en.wikipedia.org/wiki/KISS_principle

转自:http://www.aqee.net/s-o-l-i-d-class-design-principles/

转载于:https://www.cnblogs.com/hnrainll/archive/2012/11/29/2794175.html

S.O.L.I.D.类设计原则相关推荐

  1. 面向对象的设计原则-类设计原则

    面向对象的设计原则-类设计原则 排行榜 收藏 打印 发给朋友 举报发布者:七月十五 热度票  浏览1368次 [共4条评论][我要评论]时间:2008年11月08日 10:55 在面向对象设计中,如何 ...

  2. 类设计原则及设计模式(一篇就够)

    类设计原则及设计模式 类设计的六大原则 设计模式定义 设计模式的分类 创建型模式 1. 简单工厂和工厂方法模式 定义和分类 2. 抽象工厂模式 3. 单例模式 定义 优缺点 饿汉式单例与懒汉式单例类比 ...

  3. 企业vi设计中服装服饰类设计原则

    企业vi设计中服装服饰类设计原则 编辑:AGO(安可)品牌顾问 企业员工的服装和服饰是企业vi设计的重要媒介,具有传达企业经营理念.行业特点.工作风范.整体精神面貌的重要作用.企业对于员工服装的统一规 ...

  4. 【设计方法论】OOP设计原则

    这里说的设计原则是指用来指导类该如何定义? 其与设计模型的区别在于,后者是用来定义类之间的行为. 类设计原则 SRP 单一职责原则 一个类应该有且仅有一个职责.关于职责的含意,面向对象大师 Rober ...

  5. 【拓展】深度解析蚂蚁Ant Design的设计原则

    作者:菜菜不甜 https://www.zcool.com.cn/article/ZMTI1OTI1Mg==.html 本文讲述了Ant Design设计原则的相关内容,希望可以给到各位帮助. 『 A ...

  6. 深度解析蚂蚁Ant Design的设计原则

    『 Ant Design是什么 』 众所周知蚂蚁集团的B端产品是一个庞大的系统,数量多且功能复杂,而且变动频繁,常常需要设计师和开发人员能快速做出工作上的配合.同时这类产品中有存在很多类似的页面以及组 ...

  7. 设计一个矩形类rectangle_万字长文带你捋清六种设计模式的设计原则(建议收藏)...

    对于设计模式,自己很早之前就看了好多本设计模式书籍,其中一些还看了好几遍,也一直希望自己能在编码的时候把这些设计模式用上去.可是,在日常的打码中,用的最多的就是单例,其次是观察者和建造者模式 ( bu ...

  8. 转:软件设计漫谈之三:30分钟掌握面向对象类的设计原则

    转自:http://blog.csdn.net/yunhua_lee/article/details/5105524 30分钟掌握面向对象类的设计原则 看过设计模式的人不少,但看过Martin的面向对 ...

  9. 进行面向对象设计时,就一个类而言,应该仅有一个引起它变化 的原因,这属于()设计原则。【最全!最详细解析!】

    进行面向对象设计时,就一个类而言,应该仅有一个引起它变化 的原因,这属于()设计原则. A.单一职责 B.开放-封闭 C.接口分离 D.里氏替换 解析: 本题考点为面向对象设计的七大原则. 开闭原则 ...

最新文章

  1. C++ 类里面,函数占用存储空间问题
  2. 前端基础之JavaScript_1(一)
  3. 网站上flv,MP4等格式的视频文件播放不出来的解决办法
  4. 一起谈.NET技术,在MVC2.0使用Lodop为WEB打印提出完美解决方案
  5. 有什么视频翻译软件?这些软件值得收藏
  6. android地图旋转监听,ArcGIS for Android示例解析之地图旋转-----MapRotation
  7. 米兔机器人恐龙拼图手册_米兔积木机器人(多形态组合、自平衡系统、App联动)...
  8. 转载的硬件十万个为什么
  9. 深度学习分类常见评价指标:accuracy recall precision specificity sensitivity AUC ROC 曲线
  10. 什么是SMART原则
  11. python gpio 接口_树莓派GPIO接口常见的命令
  12. 爬取凤凰网站财经类的新闻,函数时编程,可全部实现,由于内容量大,需要时间太长,服务器会禁止,为了防止,可以将time.sleep()设置的时间长点...
  13. 关于网卡eth0、eth1以及服务器为什么要把内网和外网卡区分开
  14. orb-slam2 从单目开始的简单学习(7):Optimizer
  15. AWS 服务器登录和配置
  16. 错误 不存在从 “std::string“ 到 “LPCSTR“ 的适当转换函数
  17. 12、oauth授权认证流程
  18. 视觉SLAM笔记(21) 双目相机模型
  19. C语言:计算多项式的导函数
  20. 【Kubernetes】第二篇 - 购买阿里云 ECS 实例

热门文章

  1. 开个坑, 写个阿里云开放储存服务(OSS)的C++版SDK以及客户端
  2. How to Export Mailboxes with Exchange Server 2010 SP1(带状态查看,清除请求,归档备份)...
  3. 苹果CEO 斯蒂夫.乔布斯:我如何工作
  4. mysql解压版(免装版)安装过程缺失data文件处理方式
  5. 第四轮全国学科评估中获评A+的高校及学科(A+高校排行榜)
  6. C++面试宝典2011
  7. 检测到USB设备插入写法1
  8. raptor五个数排序流程图_数据结构与算法(一):排序(上)
  9. mfc 饼图绘画_每周推荐|江南百景图放置类佛系游戏,慢慢玩才是乐趣
  10. ArrayList和LinkedList的索引问题