我有一个问题的理解之下的UML:UML帮助C#设计原则
具体来说,什么是PersistentSet
和ThirdPartyPersistentSet
之间的关系? PersistentObject
和ThirdPartyPersistentSet
之间有什么关系?
请注意,UML是敏捷原则,模式与实践在C# 马丁·罗伯特C.马丁弥2006年第10章
提前感谢!
我有一个问题的理解之下的UML:UML帮助C#设计原则
具体来说,什么是PersistentSet
和ThirdPartyPersistentSet
之间的关系? PersistentObject
和ThirdPartyPersistentSet
之间有什么关系?
请注意,UML是敏捷原则,模式与实践在C# 马丁·罗伯特C.马丁弥2006年第10章
提前感谢!
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;
}
...
}
具体来说,PersistentSet和ThirdPartyPersistentSet之间的关系是什么?
PersistentSet具有一对多ThirdPartyPersistentSets
什么是持久性对象和ThirdPartyPersistentSet之间的关系?
ThirdPartyPersistentSet取决于(使用-a)的持久性对象
所有在UML类图的线条指示一个排序的依赖性或另一种除虚线等来注释(折角框)。没有箭头的实线表示两(2)路(双向)依赖性。
感谢您的咨询! – Pingpong 2011-06-01 22:37:40
黑色钻石代表组成 ,遏制(如在具有由箭头指出的类型的字段中): PersistentSet
实体包含ThirdPartyPersistentSet
实体 当PersistenSet被销毁时,包含的所有ThirdPartyPersistenSet对象也将被销毁。
虚线表示依赖性,如在使一个函数调用,其具有由箭头指出的类型的参数): ThirdPartyPersistentSet
取决于PersistentObject
感谢您的咨询! – Pingpong 2011-06-01 22:39:37
具体而言,什么PersistentSet和ThirdPartyPersistentSet之间的关系是什么?
http://en.wikipedia.org/wiki/Class_diagram#Aggregation
什么是持久性对象和ThirdPartyPersistentSet之间的关系?
@Provon,谢谢你的建议! – Pingpong 2011-06-01 22:39:53
具体来说,什么是PersistentSet和ThirdPartyPersistentSet之间的关系?
固体金刚石< |> ----->是Composition
(“拥有”)其中当“整体”是“份”被破坏。在下面的图片中,如果你摧毁了一辆汽车,你会摧毁化油器。
空钻石<> ----->是Aggregation
(“有一个”),其中“部分”可能不会在“整体”时被破坏。在下面的图片中,如果你摧毁一个池塘,你不一定会破坏鸭子(如果它们很聪明,它们会移动到另一个池塘)。
什么是持久性对象和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.
}
}
代码中的Ckramer ThirdPartyPersistentSet与PersistentObject相关联。依赖是较弱的依赖形式。 ThirdPartyPersistentSet例如可以接受PersistentObject的参数并在本地使用它,这仍然是依赖关系。 – StanislawSwierc 2011-06-01 22:31:34
感谢您的建议和您的C#代码。 – Pingpong 2011-06-01 22:38:07
@proxon - 是的,你是正确的,但是因为类图没有包含任何方法defs我不想添加太多额外的东西,因为担心会让事情变得过于混乱。构造器参数是一个更难的依赖项,但它们也很明显。 – ckramer 2011-06-01 23:41:19