一些软件设计的原则
2014-03-07 15:42
274 查看
转自:陈皓的博客:酷壳 – CoolShell.cn
查询:当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质;
命令:当一个方法要改变对象的状态的时候,它就具有命令的性质;
在设计接口时,如果可能,应该尽量使接口单一化,保证方法的行为严格的是命令或者是查询,这样查询方法不会改变对象的状态,没有副作用,而会改变对象的状态的方法不可能有返回值。
对于对象 ‘O’ 中一个方法’M',M应该只能够访问以下对象中的方法:
a. 对象O;
b. 与O直接相关的Component Object;
c. 由方法M创建或者实例化的对象;
d. 作为方法M的参数的对象。
Unix/Linux是这一原则的完美体现者。各个程序都独立负责一个单一的事。
Windows是这一原则的反面示例。几乎所有的程序都交织耦合在一起。
Open/Closed Principle (OCP) – 开闭原则
关于开发封闭原则,其核心的思想是:模块是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
Liskov substitution principle (LSP) – 里氏代换原则
软件工程大师Robert C. Martin把里氏代换原则最终简化为一句话:“Subtypes must be substitutable for their base types”。也就是,子类必须能够替换成它们的基类。
Interface Segregation Principle (ISP) – 接口隔离原则
接口隔离原则意思是把功能实现在接口中,而不是类中,使用多个专门的接口比使用单一的总接口要好。
Dependency Inversion Principle (DIP) – 依赖倒置原则
高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象。
1.DRY——Don’t Repeat Yourself
很好理解,对重复的代码进行抽象封装。2.KISS——Keep It Simple, Stupid
把一个事情搞复杂是一件简单的事,但要把一个复杂的事变简单,这是一件复杂的事。3.Program to an interface, not an implementation
这是设计模式中最根本的哲学,注重接口,而不是实现,依赖接口,而不是实现。4.CQS——Command-Query Separation
命令-查询分离原则。查询:当一个方法返回一个值来回应一个问题的时候,它就具有查询的性质;
命令:当一个方法要改变对象的状态的时候,它就具有命令的性质;
在设计接口时,如果可能,应该尽量使接口单一化,保证方法的行为严格的是命令或者是查询,这样查询方法不会改变对象的状态,没有副作用,而会改变对象的状态的方法不可能有返回值。
5.YAGNI——You Ain’t Gonna Need It
这个原则简而言之为——只考虑和设计必须的功能,避免过度设计。只实现目前需要的功能,在以后您需要更多功能时,可以再进行添加。6.Law of Demeter
迪米特法则,又称“最少知识原则”(Principle of Least Knowledge),其来源于1987年荷兰大学的一个叫做Demeter的项目。Craig Larman把Law of Demeter又称作“不要和陌生人说话”。对于对象 ‘O’ 中一个方法’M',M应该只能够访问以下对象中的方法:
a. 对象O;
b. 与O直接相关的Component Object;
c. 由方法M创建或者实例化的对象;
d. 作为方法M的参数的对象。
7.面向对象的S.O.L.I.D 原则
Single Responsibility Principle (SRP) – 职责单一原则Unix/Linux是这一原则的完美体现者。各个程序都独立负责一个单一的事。
Windows是这一原则的反面示例。几乎所有的程序都交织耦合在一起。
Open/Closed Principle (OCP) – 开闭原则
关于开发封闭原则,其核心的思想是:模块是可扩展的,而不可修改的。也就是说,对扩展是开放的,而对修改是封闭的。
Liskov substitution principle (LSP) – 里氏代换原则
软件工程大师Robert C. Martin把里氏代换原则最终简化为一句话:“Subtypes must be substitutable for their base types”。也就是,子类必须能够替换成它们的基类。
Interface Segregation Principle (ISP) – 接口隔离原则
接口隔离原则意思是把功能实现在接口中,而不是类中,使用多个专门的接口比使用单一的总接口要好。
Dependency Inversion Principle (DIP) – 依赖倒置原则
高层模块不应该依赖于低层模块的实现,而是依赖于高层抽象。