SOLID是傻瓜的面向对象
您肯定知道SOLID的缩写。 它代表了面向对象编程的五项原则,如果遵循这些五项原则,它们将使您的代码既清晰又可扩展 。 它们是在30年前推出的,但是从那时起,它们真的使我们成为更好的程序员了吗? 感谢他们,我们真的更好地理解了OOP吗? 我们是否编写更多的“清晰可扩展”的代码? 我不这么认为。
让我们一个接一个地去看看他们如何“提供帮助”。
小号
“ 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