本文是由敏捷宣言签署人之一,《 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 页
好莱坞原则
不要调用我,我会调用你的。
不要自我重复(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)
不要添加你“认为以后可能有用”的代码。只在“事到临头”时才添加代码。
简单化,傻瓜化(KISS)
让它能工作的最简单的方法是什么?
- http://c2.com/cgi/wiki?DoTheSimplestThingThatCouldPossiblyWork
- http://en.wikipedia.org/wiki/KISS_principle
相关推荐
设计模式的基础是坚实的面向对象设计原则,以Robert Martin的S.O.L.I.D.设计原则为例来讲解这一点。还将介绍Martin Fowler的Patterns of Enterprise Application Architecture一书中提出的一些更高级的模式
7.S.O.L.I.D五大原则之开闭原则OCP 8.S.O.L.I.D五大原则之里氏替换原则LSP 9.根本没有“JSON对象”这回事! 10.JavaScript核心(晋级高手必读篇) 11.执行上下文(Execution Contexts) 12.变量对象(Variable ...
前言 本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第3篇,里氏替换原则LSP(The Liskov Substitution Principle )。 英文原文:...
本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第4篇,接口隔离原则ISP(The Interface Segregation Principle)。 英文原文:...
前言 Bob大叔提出并发扬了S.O.L.I.D五大原则,用来更好地进行面向对象编程,五大原则分别是: The Single Responsibility Principle(单一职责SRP) The Open/Closed Principle(开闭原则OCP) The Liskov ...
主要介绍了深入理解JavaScript系列(22):S.O.L.I.D五大原则之依赖倒置原则DIP详解,本文讲解了DIP and JavaScript、何时依赖注入等内容,需要的朋友可以参考下
5大设计原则:SOLID S 单一职责原则 O 开放封闭原则 L 李氏置换原则 I 接口独立原则 D 依赖倒置原则
本章我们要讲解的是S.O.L.I.D五大原则JavaScript语言实现的第2篇,开闭原则OCP(The Open/Closed Principle )。
深入理解JavaScript系列(7):S.O.L.I.D五大原则之开闭原则OCP 深入理解JavaScript系列(8):S.O.L.I.D五大原则之里氏替换原则LSP 深入理解JavaScript系列(9):根本没有“JSON对象”这回事! 深入理解...
S:单一责任原则(Принципединственнойответственности)。 O:开闭原理(Принципоткрытости-закрытости)。 L:Liskov替代原则(Принцип...
那些以前已经体验过设计模式的读者可能希望跳过本书的第Ⅰ部分,这部分介绍了GoF提出的设计模式以及其他常见设计原则,包括S.O.L.I.D原则和Martin Fowler的企业设计模式。所有的代码示例均采用C#语言编写,但这些...
网传资源,如有侵权请联系/留言...135.UIFrame096 k9 R4 `# o# S. w8 S 136.UIFrame10& |* r5 P, [5 C) q 137.Audio1 138.Audio2/ D- x4 J6 e0 B8 J0 P 139.Audio3' b5 c. |. B" _5 ? X/ H 140.www1 141.www2 142.www3
S - Single-responsiblity principle 单一责任原则 O - Open-closed principle 开发封闭原则 L - Liskov substitution principle 里氏替换原则 I - Interface segregation principle 接口分离原则 D - Dependency ...
那些以前已经体验过设计模式的读者可能希望跳过本书的第ⅰ部分,这部分介绍了gof提出的设计模式以及其他常见设计原则,包括s.o.l.i.d原则和martinfowler的企业设计模式。所有的代码示例均采用c#语言编写,但这些概念...
1. 编制原则 (1)本施工组织设计作为指导施工的依据,编制时对项目管理机构设置、劳动力组织、施工进度计划控制、机械设备及周转材料配备、主要分部分项工程施工方法、工程质量控制措施、安全生产保证措施、文明施工...
1-1 简述计算机程序设计语言的发展历程。 解: 迄今为止计算机程序设计语言的发展经历了机器语言、汇编语言、高级语言等阶段,C++语言是一种面向对象的编程语言,也属于高级语言。 1-2 面向对象的编程语言有哪些...