面一家很老的电力公司问到的,那个四十多岁的戴金丝框眼镜的老头盯着一个面试文档一句一字的问概念,就问到这个问题,我真的是服气了,他自己都肯定记不住,但是却要求面试者完全背熟这些概念性的问题。
说句实在的,在实际项目开发中,没人会抠着这八大原则的字眼去写业务代码,我们都会大概知道有这么个约束,就自然而然地写,并且很多大公司的接口设计,也是有一定程度上打破这些原则的。
(1)单一职责原则
每一个类甚至每一个接口都只负责完成一个业务操作。比如我们一开始写demo时候,deleteById(int id )就是严格遵循了这个原则。
打破:
那么我要根据名称删除或者根据性别删除,难道还要写多个?但是这样明显不太符合实际开发,于是就有了deleteByType(int type , Param)这种,根据type来区分要删除的内容。截止到目前,这个接口还是遵循的,只负责‘删除‘的操作。
再次升级:新增一个用户,updateUser(id , param) ,这个之所以不写add,是因为我们把update也放进去了,nest.js的一个持久层就是这么做的,先根据这个ID找,由于是主键索引,速度非常快,如果找到,就代表是更新,如果找不到,就代表是新增用户,那么这个接口或者类,就是完全打破了单一职责原则。
(2)里氏替换原则
就是父类可以存在的地方,替换成子类也可以。
子类存在的地