避免重复,DRY(Don't repeat yourself):
如果你准备在不同地方写同一段代码,那么只写一个方法。如果不止一次硬编码某个值,那么将其声明成public final常量。这么做的好处就是容易维护。但不要滥用这一条,重复不是指代码的重复,而是指功能的重复。
将变化封装起来:
最好将你觉得将来会有改变的代码封装起来。这样做的好处就是更容易测试和维护正确的被封装的代码。
solid
单一职责原则(Single Responsibility Principle):
每次一个类只有一个更改的原因,或者一个类只应该完成单一的功能。如果你将多过一个功能放在一个类中,它会将两个功能耦合在一起,如果你改变了其中一个功能,可能会破坏另外一个功能,这样便需要更多的测试以确保上线时不出现什么岔子。核心就是解耦
和增强内聚性
。开闭原则(Open Closed Principle):
类应该对扩展是开放的,对修改是封闭的。即可扩展(extension),不可修改(modification)。即应尽量在不修改原有代码的情况下进行扩展。里氏替换原则(Liskov Substiution Principle):
任何基类可以出现的地方,子类一定可以出现。LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才真正被利用,而衍生类也能够在基类的基础上增加新的行为。
里氏替换原则告诉我们,在软件中将一个基类对象替换成字的子类对象,程序将不会产生任何错误和异常,反过来则不成立。如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。
继承必须确保超类所拥有的性质在子类中仍然成立。也就是说,当一个子类的实例应该能够替换任何其超类的实例时,他们之间才具有is-A关系。
is-A:在面向对象设计的领域里,is-a(英语:subsumption,包含架构)指的是类的父子类继承关系。
https://baike.baidu.com/item/Is-a/15813994?fr=aladdin
接口隔离原则(Interface Segregation Principle):
指明任何代码不应被迫使用对其而言无用的方法或功能。接口隔离原则(ISP)拆分非常庞大臃肿的接口成为更小的和更具体的接口,这样客户将会只需要知道他们感兴趣的方法。这种缩小的接口也被称为角色接口。
接口隔离原则(ISP)的目的是系统解开耦合,从而容易重构,更改和重新部署。依赖倒置原则(Dependence Inversion Principle):
程序要依赖于抽象接口,不要依赖于具体实现。简单的说就是要求对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合。
面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变动时,上层也要跟着变动,这就会导致模块的复用性降低而且大大提高了开发的成本。
面向对象的开发很好的解决了这个问题,一般情况下抽象的变化概率很小,让用户程序依赖于抽象,实现的细节也依赖于抽象。即使实现细节不断变动,只要抽象不变,客户程序就不需要弯。这大大降低了客户程序与实现细节的耦合度。迪米特原则(Law of Demeter)
:又叫最少知识原则(Least Knowledg Principle简写LKP),一个类对于其他类知道的越少越好,就是说一个对象应该对其他对象有尽可能少的了解,只和朋友通信,不和陌生人说话。