不良面向对象设计的特点

时间:2016-03-05 03:14:09

标签: oop design-principles

我正在阅读面向对象的设计原则。我遇到了一个糟糕设计的特征。

  
      
  1. 很难改变,因为每一次变化都会影响其他太多   系统的一部分。 (刚性)
  2.   
  3. 当您进行更改时,系统的意外部分会中断。   (脆弱)
  4.   
  5. 很难在其他应​​用程序中重用,因为它不可能   从当前的申请中解脱出来。 (不动)
  6.   

我能够理解前两个,但第三个对我来说很难理解。 它是关于在Base类中提取相关类的常用功能,从代码中重复创建方法吗?但它说hard to reuse in another Application.通常我们编写特定于上下文的代码而Over-engineering不是一个好主意,我们有很好的原则,如YAGNI(你不需要它)我发现这些想法几乎没有矛盾。

请提供宝贵的意见。

1 个答案:

答案 0 :(得分:1)

移动性示例:

假设以下类:

  1. 动物
  2. 正如您所料,Canine延伸AnimalDog延伸Canine

    设计不当Animal的一种方法是给它一个方法talk()打印出bark。也许,这个应用程序的初衷只针对狗,因此talk方法吠叫很好。但是在另一个代码库中重用它会导致问题。

    假设我们要扩展Animal并创建Bird。鸟不会吠叫:)

    很难想象有人会这样做。但它始终在发生。基类没有被抽象出来,这导致错误的代码使得难以纠正/重用。

    有人可能认为Bird类可以覆盖talk方法。但是,另一个开发人员Animal因为另一个原因可能会忘记覆盖该方法......等等。

    我知道这不是最好的例子,但它证明了这个问题。