代码整洁的规则
在知乎看到的,说代码要几个基础原则: 单一原则、开闭原则、里氏代换原则、组合复用原则、接口隔离原则、 依赖倒置原则、迪米特原则。
学习一下,争取以后能用到。
# 单一原则(SRP,Single Responsibility Principle)
There should never be more than one reason for a class to change。
一个类(JavaScript 下是一个对象或者一个函数)应该有一组紧密相关的行为。 遵守单一职责的好处是可以让我们很容易地来维护这个对象或者这个函数,如果一个对象或者函数封装了很多功能的话,一旦一个功能需要修改,必然会影响该对象或函数里其他功能的代码。 我们通过解耦可以让每个功能更加有弹性地变化。
毕竟函数是 JavaScript 的一等公民,一个函数完成一个功能,最后叠加成了想要的系统。
# 开闭原则 (OCP,The Open/Closed Principle)
Software entities (classes, modules, functions, etc.) should be open for extension but closed for modification.
软件实体(类,模块,方法等等)应当对扩展开放,对修改关闭,即软件实体应当在不修改的前提下扩展。 当新需求出现的时候,可以通过扩展现有模型达到目的, 不允许对该实体做任何修改。 需要执行多样行为的实体应该设计成不需要修改就可以实现各种的变化,坚持开闭原则有利于用最少的代码进行项目维护。
# 里氏替换原则 (LSP Liskov Substitution Principle)
Subtypes must be substitutable for their base types.
派生类型必须可以替换它的基类型。 如果对每一个类型为 T1 的对象 o1,都有类型为 T2 的对象 o2,使得以 T1 定义的所有程序 P 在所有的对象 o1 都换成 o2 时,程序 P 的行为没有变化,那么类型 T2 是类型 T1 的子类型。 更通俗的说:子类可以扩展父类的功能,但不能改变父类原有的功能。
里氏替换原则包含以下 4 层含义
- 子类可以实现父类的抽象方法,但是不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类覆盖或实现父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
# 如何才能使代码贴近这些原则
只需要牢记,使代码保持足够简单, 还有一个,就是尽早重构~~~