SOLID是傻瓜的面向对象

您肯定知道SOLID的缩写。 它代表了面向对象编程的五项原则,如果遵循这些五项原则,它们将使您的代码既清晰又可扩展 它们是在30年前推出的,但是从那时起,它们真的使我们成为更好的程序员了吗? 感谢他们,我们真的更好地理解了OOP吗? 我们是否编写更多的“清晰可扩展”的代码? 我不这么认为。

SOLID是傻瓜的面向对象

笨蛋与笨蛋(1994),彼得·法雷利(Peter Farrelly)

让我们一个接一个地去看看他们如何“提供帮助”。

小号

“ S”指的是“ 单一责任原则” ,根据罗伯特·马丁Robert Martin)的清洁法》Clean Code)所述,这意味着“一个阶级应该只有一个改变的理由”。

这句话对我来说似乎非常含糊,但是书中对此进行了解释,指出对象必须以问题为中心,并对“一件事情”负责。 当然,这取决于我们来决定一件事是什么。

自1974年Larry Constantine在《 IBM Systems Journal 》上发表这句话以来,我们就将其称为“高度凝聚力” 。为什么15年后有必要创建一个名称不明确,定义非常可疑的新原则?

Ø

这封信是关于“ 打开/关闭原理”的 ,它是由Bertrand Meyer于1988年在“ 面向对象的软件构造”中引入的。简而言之,这意味着不应修改对象。 我完全同意这一点。

但是随后它说它应该是可扩展的 ,从字面上看是通过实现继承 (被称为反OOP技术)实现的。 因此,该原理实际上不适用于对象和OOP。 它可能适用于模块和服务,但不适用于对象。

大号

第三封信是针对Liskov替代原则的 ,该原则是由Barbara Liskov于1987年提出的。这是SOLID五单元组中最无辜的部分。 简而言之,它声明如果您的方法需要一个Collection,ArrayList将起作用。

它也被称为子类型化,并且是任何面向对象语言的基础组件。 为什么我们需要称其为原则并“遵循”它? 无需子类型化就可以创建任何面向对象的软件吗? 如果这是一个原则,让我们在这里也添加“变量”和“方法调用”。

老实说,我怀疑此原则主要是为了在某种程度上填补“ SO”和“ ID”之间的空白而被添加到SOLID中。

我和D

我想它们都是由Robert Martin在施乐公司工作时介绍的。

接口隔离原则指出,如果只需要Collection x甚至Iterable x.则不能声明List x Iterable x. 我完全同意。 让我们看看下一个。

依赖倒置原则意味着必须声明List x而不是ArrayList x,并让对象的提供者确定它是ArrayList还是LinkedList. 这对我来说也很合理。

但是,这一切与康斯坦丁在1974年结合凝聚力引入的良好的“松散耦合”有何不同? 我们真的需要简化和模糊化以便更好地学习吗? 不,不是学习得更好,而是要卖得更好。 这就是我的意思。

我的意思是

这些原则的意义只不过是以一种非常原始,模棱两可和可销售的方式来解释傻瓜的“凝聚力和耦合性”。 傻瓜会购买书籍,研讨会和培训,但实际上无法理解其背后的逻辑。 他们真的需要吗? 他们只是 猴子 编码员 ,对吗?

SOLID是一种赚钱的工具,而不是使代码更好的工具。

“但是一个对象必须对一件事负责!” 是我在会议上经常听到的。 人们甚至不知道凝聚力是什么,也不了解他们为之祈祷的“一件事”到底是什么,而学习这种咒语。 伙计们,没有“一件事”! 凝聚力有不同的水平。

谁有罪? 鲍伯叔叔公司

他们并不比雷德利·斯科特Ridley Scott)和其他好莱坞赚钱的人好,他们提供原始且易于哭泣的电影只是为了赚钱。 人们通过观看变得愚蠢,但这与他们无关。 神奇的OOP原则也会发生同样的情况-程序员依靠它们,认为真理就在那里,而真正的真理甚至没有被“魔术师”的创造者理解。

SOLID是一种赚钱的工具,而不是使代码更好的工具。

您可能还会发现以下相关文章很有趣: Command,Control和Innovate 同步装饰器,以替换线程安全类 继承是一种代码重用的程序技术 ; 冗余变量是纯粹的邪恶 ; 复合名称是代码气味 ;

翻译自: https://www.javacodegeeks.com/2017/03/solid-oop-dummies.html