五项 SOLID 原则之间的关系是什么?

What are the relationships between the five SOLID principles?

这已经困扰我很久了。 SOLID 是一组用于可维护和可扩展开发的五个原则,通常受到 C# 等大型项目的青睐。

但是真的有五个原则吗?也就是说,有没有可能写出满足4但不满足5或原则的代码?这是否适用于任何 4 项原则的选择?

我问的原因是我很难将它们的逻辑完全分开,而且它们似乎有点重叠,这让我怀疑是否需要所有五个规则,或者 SOLID 是否可以更简洁地描述为,比如说,三个原则。

将 SOLID 原则视为一个补充工具包,而不是一个单一的概念单元。 Martin has even ranked the principles in order of importance (podcast link)。它们是具有不同目的的不同原则,但应用程序越大,您就越有可能有机会利用所有五个。

另请记住,还有 其他设计模式、实践和原则将帮助您编写更好的代码和设计更好的系统 - SOLID 就是冰山一角。

你当然可以想出不同的原则,人们有:例如,GRASP and CUPID

从 Robert Martin 的角度来看,SOLID 是不同的,任何四个都可以独立应用。有点切线,最密切相关的两个可能是 OCP and DIP。特别是,DIP 是其他原则的延伸(用 Martin 自己的话说),但显然是他觉得值得一提的延伸;甚至我们可以从 OCP 中挑选出 DIP。其他的相对容易隔离。

这并不是说没有重叠。事实上,如果基础编程原则彼此之间没有关系,那将是奇怪的。但很明显,每个人都贡献了一些独特的东西。

当然,如果您尝试的话,您可以将这五个缩减为更少的内容,但我认为 SRP 在这里是一个警示故事。它已经是几个旧原则的组合,包括耦合、内聚和关注点分离。在我看来,将这些原则浓缩为一个(大概是更一般的原则)已经导致了 SOLID 最令人困惑的方面。

想象一下,如果只有一个原则。那么编程不是很容易吗? las,该原则将如此模糊和笼统以致于不适用。考虑相反的情况:SOLID 可以扩展为十几个或一百个原则。它不再适合汽车保险杠贴纸,因此不适合营销和销售书籍,但它会更真实地反映软件设计的复杂性。

我不认为这些原则集合的任何作者会坚持认为他们的集合是详尽无遗的;但我确实认为你可以从每个原则中学到一些东西。