2011-06-01 107 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. 
    } 
}