单一原则
类的设计只为完成某一类任务;类中方法只为完成某一个任务;模块的设计只为完成某一个功能;这些体现的都是单一原则。
如下展示
import {model} from 'mongoose'; const User = model('User'); export default class UserModel { static newUser(data) { return new User(data); } static saveUser (document) { return document.save(); } static otherNewUser(data) { return model.create(data); } }
在使用mongoose时,为创建一个document,模块实现了3个方法new Model(); document.save(); Model.create(),。
其中Model.create()就是先 new Model(), 然后调用 save()写入数据库;直接使用create虽然简化了一点开发工作,但是在以后开发过程中的复用性却远远不及前两个方法;原因就是create方法失去了单一原则。
开闭原则
构思基类时,确保基类的属性/行为能够描述所有实例(包括子类实例)的一致特征,不为某单一实例修改属性/行为;实例之间的区别通过子类扩展,避免实例间互相影响。一句话描述就是 对修改关闭,对扩展开放。
如下展示
class Person { constructor () { this.name = ''; /* 其它一些通用属性: age,sex,。。。。 */ } /* 其它一些通用行为: getAge,setSex,。。。。 */ setName (name) { this.name = name; } getName () { return this.name; } } class Adult extends Person { constructor () { super(); this.career = '';//成年人特有的属性:职业 } setCareer (career) { this.career = career } getCareer () { return this.career; } } class Child extends Person { constructor () { super(); this.kindergaten;//小朋友特有的属性:幼儿园 } setKdg (kdg) { this.kindergaten = kdg; } getKdg () { return this.kindergaten; } }
上述两个子类 Adult/Child 都是对Person的扩展,各自扩展出自己独特的属性和行为,而不去为了某一独特需求更改基类。