wol*_*ats 2 design-patterns class-design class-diagram
考虑以下类图:
+--------+ * +------------+
| Person |------>| Property |
+--------+ +------------+
^
|
+--------+------+
| |
+----+----+ +------+-----+
| Car | | House |
+---------+ +------------+
Run Code Online (Sandbox Code Playgroud)
人有许多属性,包括汽车,房子,智能手机等.每个属性都有不同的属性(汽车有引擎大小,型号,年份......房子作为地址,大小等).有许多子类(属性类型).
现在,我的实现是将Property作为带有类型字段的抽象类.我检查类型并将其转换为正确的子类.
我的问题是:这是唯一的方法吗?这是正确的方法吗?它感觉不对,所以请与我分享你的设计思路.也将接受彻底改变.
这实际上取决于你如何使用这些Property,一般或特定(或两者).如果它们唯一的共同点是它们可以被拥有,我宁愿在它们之间有一个共同的接口,而不是一个共同的基类.然后,您可以将它们存储在集合中,并具有作用于集合子集的特定于功能的方法,这些方法将首先根据所需的功能过滤集合.功能更像是接口和角色而不是类型和类; 所以你可以有独立性之间的水平是什么你想达到(您的意思)和如何你实现它(的实现).
在伪C#代码中,它看起来像这样:
interface Property {}
interface Valued {
Money Value { get; }
}
class Person {
private Collection<Property> properties;
public Money TotalValue {
get {
return properties.OfType<Valued>().Sum(v => v.Value);
}
}
}
Run Code Online (Sandbox Code Playgroud)
您还可以Car使用相同的技术按特定类型进行过滤,例如,如果您想对所有s 执行某些操作.更通用的方法可以返回特定类型的所有属性,以便客户端可以使用它们执行某些特定逻辑.