无法理解“单一责任原则”的第二个好处

时间:2015-11-27 13:44:03

标签: oop single-responsibility-principle

在“敏捷软件开发:原则,模式和实践”一书中,“单一责任原则”部分提供了一个关于具有多个职责的班级Rectangle的示例:

class Rectangle {
    public void draw() { ... }
    public double area() { ... }
}

不同的类只能使用其中一种方法:

class ComputationalGeometryApplication {
    Rectangle rectangle;
    public void someMethod() {
       double area = rectangle.area();
    }
}

class GraphicalApplication {
    Rectangle rectangle;
    public void someMethod() {
       rectangle.draw();
    }    
}

(注意:本书以c++为例,我在这里使用Java代码,因为我不熟悉c++

我不清楚这句话:

  

其次,如果对GraphicalApplication的更改导致Rectangle由于某种原因而发生更改,则该更改可能会强制我们重建,重新测试和重新部署ComputationalGeometryApplication。

假设GraphicalApplication导致draw()方法变为draw(boolean),为什么会强制我们重建,重新测试和重新部署ComputationalGeometryApplication

我的意思是,

  1. ComputationalGeometryApplication可以选择使用Rectangle的旧版本编译文件,如果我们知道GraphicalApplication导致的更改与自身无关

  2. 如果ComputationalGeometryApplication想要使用新版本的Rectangle,是的,我们应该重建/重新测试/重新部署。但即使draw()方法不在Rectangle中,但在另一个相同代码库的类中,如果我们想要使用新版本,我们仍然需要重建/重新测试/重新部署ComputationalGeometryApplication包含Rectangle

  3. 的库

    我真的不明白这个好处,我错过了什么?

    更新:引用的问题对我有很大的帮助,因为这两个问题略有不同,我想在这里加入我的理解。

    关键是该问题的公认答案中的这句话:

      

    “如果GraphicalApplication在Rectangle类中需要新方法或语义更改,那么会影响ComputationalGeometryApplication,因为它们都”链接“到Rectangle库”

    关键字link提醒我Rectangle位于共享库中。当GraphicalApplication更改后,ComputationalGeometryApplication会自动使用Rectangle类的新版本。如果对Rectangle的更改与之前的更改不一致,那么它会在Rectangle的构造函数中添加一些额外类的引用:

    class Rectangle {
        Rectangle() {
           SomeExtraClass cls = new SomeExtraClass()
        }
    }
    

    对于ComputationalGeometryApplication,如果我们没有重建它将会失败,因为在初始化SomeExtraClass类时可能找不到类Rectangle

0 个答案:

没有答案