2011-06-01 102 views
2

我有一個問題的理解之下的UML:UML幫助C#設計原則

UML Image

具體來說,什麼是PersistentSetThirdPartyPersistentSet之間的關係? PersistentObjectThirdPartyPersistentSet之間有什麼關係?

請注意,UML是敏捷原則,模式與實踐在C# 馬丁·羅伯特C.馬丁彌2006年第10章

提前感謝!

回答

1

PersistentSet和ThirdPartyPersistentSet之間的關係是一個聚合,這意味着PersistentSet包含一個或多個ThridPartyPersistenSet實例。這是一個「弱」關係,這意味着ThirdPartyPersistentSet的實例可以存在於PersistentSet之外。

PersistentObject和ThirdPartyPersistentSet之間的關係是一個Dependency,這意味着ThirdPartyPersistentSet需要一個PersistentObject來完成它的工作。

所以,這個翻譯成代碼,您PersistentSet將包含這樣的事情:

public class PersistentSet 
{ 
    public List<ThirdPartyPersistentSet> Items { get; } 
    ... 
} 

和你ThirdPartyPersistentSet會是這個樣子:

public class ThirdPartyPersistentSet 
{ 
    private PersistentObject _object; 
    public ThirdPartyPersistentSet(PersistentObject obj) 
    { 
     _object = obj; 
    } 
    ... 
} 
+2

代碼中的Ckramer ThirdPartyPersistentSet與PersistentObject相關聯。依賴是較弱的依賴形式。 ThirdPartyPersistentSet例如可以接受PersistentObject的參數並在本地使用它,這仍然是依賴關係。 – StanislawSwierc 2011-06-01 22:31:34

+0

感謝您的建議和您的C#代碼。 – Pingpong 2011-06-01 22:38:07

+0

@proxon - 是的,你是正確的,但是因爲類圖沒有包含任何方法defs我不想添加太多額外的東西,因爲擔心會讓事情變得過於混亂。構造器參數是一個更難的依賴項,但它們也很明顯。 – ckramer 2011-06-01 23:41:19

0

具體來說,PersistentSet和ThirdPartyPersistentSet之間的關係是什麼?

PersistentSet具有一對多ThirdPartyPersistentSets

什麼是持久性對象和ThirdPartyPersistentSet之間的關係?

ThirdPartyPersistentSet取決於(使用-a)的持久性對象

所有在UML類圖的線條指示一個排序的依賴性或另一種除虛線等來註釋(折角框)。沒有箭頭的實線表示兩(2)路(雙向)依賴性。

+0

感謝您的諮詢! – Pingpong 2011-06-01 22:37:40

0

黑色鑽石代表組成 ,遏制(如在具有由箭頭指出的類型的字段中): PersistentSet實體包含ThirdPartyPersistentSet實體 當PersistenSet被銷燬時,包含的所有ThirdPartyPersistenSet對象也將被銷燬。

虛線表示依賴性,如在使一個函數調用,其具有由箭頭指出的類型的參數): ThirdPartyPersistentSet取決於PersistentObject

Look at the Wikipedia entry for more details

+0

感謝您的諮詢! – Pingpong 2011-06-01 22:39:37

2

具體來說,什麼是PersistentSet和ThirdPartyPersistentSet之間的關係?

固體金剛石< |> ----->是Composition(「擁有」)其中當「整體」是「份」被破壞。在下面的圖片中,如果你摧毀了一輛汽車,你會摧毀化油器。

空鑽石<> ----->是Aggregation(「有一個」),其中「部分」可能不會在「整體」時被破壞。在下面的圖片中,如果你摧毀一個池塘,你不一定會破壞鴨子(如果它們很聰明,它們會移動到另一個池塘)。

Composition http://upload.wikimedia.org/wikipedia/en/thumb/9/9f/AggregationAndComposition.svg/220px-AggregationAndComposition.svg.png

什麼是持久性對象和ThirdPartyPersistentSet之間的關係?

這是一種依賴關係。有關更多信息,請參閱我的回答here

那麼在使用參數傳遞時,何時依賴關係會變爲關聯關係?

如果您在本地存儲參數,則它會從依賴關係變爲關聯關係。如果您只在本地使用該參數,則它保持依賴關係。

C#代碼示例:

// Association 
public class ThirdPartyPersistentSet 
{ 
    private PersistentObject _object; 
    public ThirdPartyPersistentSet(PersistentObject obj) 
    { 
     _object = obj; // Store it to a local variable. 
     // Now ThirdPartyPersistentSet 'knows' about 
     // the PersistentObject. 
    } 
} 

// Dependency 
public class ThirdPartyPersistentSet 
{ 
    public ThirdPartyPersistentSet(PersistentObject obj) 
    { 
     obj.GetSomething(); // Do something with obj, 
     // but do not store it to a local variable. 
     // You only 'use' it and ThirdPartyPersistentSet 
     // does not 'know' about it. 
    } 
}