2017-08-13 132 views
1

我实现在Python中的MVC模式下面的类定义的应用程序:UML聚合可以两种方式吗?

class Controller(object): 
    def __init__(self, model, view): 
     self.model = model 
     self.view = view 

     self.view.register(self) 

class Model(object): 
    def __init__(self): 
     pass 

class View(object): 
    def __init__(self): 
     self.controller = None 

    def register(self, controller): 
     self.controller = controller 

类被实例化

model = Model() 
view = View() 
Controller(model, view) 

控制器访问视图,但视图还可以访问控制器(因为Controller将自身传递给View)。在UML中表示这种结构的适当方式是什么?我的猜测是

UML diagram of MVC.

但我不知道这两种方式聚集存在。

回答

0

(UML 2.5节9.5.3)

[复合]指示属性是复合地聚集,即,复合物具有用于构成对象的存在和存储责任

因此,双向组成是没有意义的,因为你不能对生存负双向责任 - 一旦一方破坏另一方,另一方破坏第一个。

此外,在您使用聚合MVC示例也是不正确的,因为控制器不负责模型的生命周期;实际上可以从许多不同的控制器使用模型。

所以只需使用常规关联,具有单向和双向导航功能。

enter image description here

0

您正在使用一个共享组合物(空心菱形)。引用P. 110规格

指示该属性具有共享聚合语义。精确的共享聚合语义因应用领域和建模者而异。

因此,除非您有自己的语义定义,否则不推荐使用它的一般用法。

如果您打算使用复合聚合,则禁止在两侧进行复合聚合。这意味着每个连接元件的使用寿命取决于另一个元件的寿命。

引用p。 110以下:

组合物可以以有向无环图连接,具有传递性缺失特征;也就是说,删除图的一部分中的对象也会导致删除该对象下面的子图的所有对象。

双向不是无环的。

相关问题