我正在阅读面向对象的设计原则。我遇到了一个糟糕设计的特征。
- 很难改变,因为每一次变化都会影响其他太多 系统的一部分。 (刚性)
- 当您进行更改时,系统的意外部分会中断。 (脆弱)
- 很难在其他应用程序中重用,因为它不可能 从当前的申请中解脱出来。 (不动)
醇>
我能够理解前两个,但第三个对我来说很难理解。
它是关于在Base类中提取相关类的常用功能,从代码中重复创建方法吗?但它说hard to reuse in another Application.
通常我们编写特定于上下文的代码而Over-engineering
不是一个好主意,我们有很好的原则,如YAGNI
(你不需要它)我发现这些想法几乎没有矛盾。
请提供宝贵的意见。
答案 0 :(得分:1)
移动性示例:
假设以下类:
正如您所料,Canine
延伸Animal
而Dog
延伸Canine
。
设计不当Animal
的一种方法是给它一个方法talk()
打印出bark
。也许,这个应用程序的初衷只针对狗,因此talk
方法吠叫很好。但是在另一个代码库中重用它会导致问题。
假设我们要扩展Animal
并创建Bird
。鸟不会吠叫:)
很难想象有人会这样做。但它始终在发生。基类没有被抽象出来,这导致错误的代码使得难以纠正/重用。
有人可能认为Bird
类可以覆盖talk
方法。但是,另一个开发人员Animal
因为另一个原因可能会忘记覆盖该方法......等等。
我知道这不是最好的例子,但它证明了这个问题。