传入
如果某件东西使用了一堆不同的东西(大量传入耦合),那么如果这些东西中的任何一件发生变化,它很可能会崩溃。
不稳定= 1
传出
如果一堆不同的东西使用了某些东西(大量的传出耦合),那么如果它发生变化,很可能会破坏很多东西。
不稳定= 0
稳定性
马丁对“稳定性”的定义是“难以改变”和“几乎没有改变的理由”之间的奇特混合。然而,他的不稳定指标仅描述了“变化的难度”。“改变的原因”将与无法轻易计算的因素有更多关系,例如只是在适当的抽象级别上适当地设计界面,以及更清楚地预先了解用户端需求。
因此,高传入耦合与低传入耦合产生稳定性(如在某些难以更改的事物中,因为它会破坏一堆东西),相反的生成不稳定(如在易于更改的事物中,因为它不会破坏一堆东西) 。
大量的传入耦合可能表明您的设计缺乏重点-它使用了一堆不同的东西,因此可能缺乏明确,单一的职责。
起初,大量传出的联轴器可能被解释为是一件好事,因为这表明您的设计正在被广泛使用。但是,如果您经常尝试以破坏一切的方式来更改设计,那将是不好的。因此,随着大量传出接头的出现,这种包装就需要“很少或没有理由更换”。设计在没有更改理由的理想意义上应该是稳定的,因为同样很难更改。
稳定抽象原理
诸如依赖倒置(自然要求依赖注入)和SAP(稳定抽象原理)之类的概念都表明依赖流向抽象。有一个简单的原因可以说明为什么在“很少有改变的理由”的情况下考虑“稳定性”。抽象的界面没有提及具体细节,它只关注“做什么”而不是“事情是什么”,因此更改的原因更少。与插入显卡的GPU(具体细节)相比,我们主板上的加速图形端口(抽象接口)具有更少的理由进行设计更改。
可重用性与重用性
如果我可以提出一个与Martin有点冲突的个人度量标准,那么我想推动这一观点,即最可重用的库应寻求以最小的方式重用其他代码。这就将不稳定推向了0。这是出于实际的原因,即更改的原因最少,而且还促进了最容易部署的库。依赖于十二个不同库的,用途广泛的通用库具有许多更改原因,并且分发的捆绑包很复杂,可能难以部署。此处的区别在于,在我的案例中,“更改原因”甚至扩展到实现,因为它来自旨在发布稳定版本库的面向库的视图。Martin可能会将实施视为一个非常独立的部分,
从分发的角度来看,实现和界面会模糊在一起,从而使用户对稳定或不稳定的库产生依赖性。从接口的角度来看,仅使用接口,并且相关的实现细节是完全分开的。