但是,如果你确实需要利用里氏分离原则,请确保在与继承链中较高子级(父级)交换对象时,继承链中较低子级的对象原型不能正常工作 。
为什么?
因为如果我们不遵循里氏分离原则,我们就会构建准确而健壮的继承链 。将逻辑抽象为封装好的 base 原型 / 对象 。我们还会对原型链中的不同方法按逻辑分组,它们的特定覆盖会让代码路径更加可预期和可发现 。
如果你正确地遵循了这一原则,那么父级能用的时候子级也没法用,继承就会毫无意义 。如果你的程序尝试引用的函数并不存在于自己的子级中,因此崩溃掉——你就会完全避免继承会给你带来的任何好处——这正是我们遵循这一原则的目的 。
开闭原则
对象应对修改开放,对扩展封闭 。好的代码通常会扩展对象的代码,以限制修改 base 原型 。这样,完成扩展的对象就可以处理自己的状态以及需要执行的新功能(仅处理子项需要做的少量更改即可) 。
上面这段话是胡说八道,我们真正应该做的是:
- 对修改开放——要做任何更改,我们都要更改 base 原型 / 函数 。
- 对扩展封闭——如果要扩展,你就会开始模块化代码,不要这么做 。确保所有事情都在 base 原型 / 函数中完成 。
function makeSound(animal) {if (animal == "dog") {return "bark";} else if (animal == "duck") {return "quack";} else if (animal == "cat") {return "meow";} else if (animal == "crow") {return "caw";} else if (animal == "sheep") {return "baa";} else if (animal == "cow") {return "moo";} else if (animal == "pig") {return "oink";} else if (animal == "horse") {return "neigh";} else if (animal == "chicken") {return "cluck";} else if (animal == "owl") {return "twit-twoo";} else {/// It has to be a human at this pointreturn "hi";}}
现在,如果你需要更改某些内容,只需添加另一个 if 检查即可 。这和下文列出的多职责原则有关,但核心在于将所有内容都包含在 base 函数 / 原型中 。这样你就会进入“脆弱基类”反模式 。在这种模式下,更改 base 函数 / 原型时,你最后会在调用此函数的其他触点上出现错误 。
例如,假设 human 不该再掉进 else 里,而你添加了新的 animal,名为 wolf,你就会引入错误(除非你更新了期望 human 被记录的位置) 。
多职责原则
确保你的函数 / 对象有多重职责 。优秀的编程人员常常会将他们的代码分成多个不同的对象或模块 。但我可搞不清楚这种事情,我记不住它们都负责什么事情 。
下面是一个例子:
const godObject = {handleClicks: function(){},getUserName: function(){},handleLogin: function(){},logTransactionId: function(){},initialSiteLoad: function(){} };
godObject 负责网站的许多功能 。付款、登录、网站负载、记录交易 ID 以及网站上的所有点击功能都包括在其中 。太棒了,这样如果你遇到了错误,就会知道它只能出现在这里 。确保代码库中的每个地方都需要访问 godObject 。让它做一切工作 。我们在代码中真正想要的是高耦合(确保系统的各个部分相互依赖)和低内聚(将许多随机的数据和片段放在一起) 。
这种反模式有时被称为“瑞士军刀”,因为就算你要的只是一把剪子,但它也可以是指甲锉、锯子、镊子、开瓶器,也可以是软木钉 。
我不断强调的是,要把所有东西放在一起,然后绑定、打包、捆在一起 。
总 结我希望大家看完这篇文章后,就知道软件究竟应该怎么写才能尽可能增加调试需求、尽可能把人搞糊涂,并且搞出来最多的技术债 。
延伸阅读:
https://hackernoon.com/introducing-dilos-principles-for-JAVAscript-code-jp1d3w1b
【开发者应知道的方法论:JavaScript中的DILOS原则】
推荐阅读
- 雨水过大淹没车门车主应该 车被水淹了怎么处理
- 吃什么可以催产?
- 婴儿下巴受伤
- 婴儿下巴压一下歪了
- 柴犬的价格应该是估计 柴犬价格为什么这么贵
- Java内置条件队列应用,实现经典的生产者消费者算法
- 亚马逊|NBA中从未缺席过季后赛的球员,个个都是传奇,你都知道么
- 人类历史上瘟疫导致的蝴蝶效应现象
- 不如来喝绿茶了,应定期喝绿茶
- 打了小孩应该注意什么