2017-08-13 136 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以下:

組合物可以以有向無環圖連接,具有傳遞性缺失特徵;也就是說,刪除圖的一部分中的對象也會導致刪除該對象下面的子圖的所有對象。

雙向不是無環的。

相關問題