这是一个关于创建与对象的父/子关系的一般最佳实践问题。
假设我有 Wheel 和 Car 对象,我想将 Wheel 对象添加到 car 对象
public class Car{
private List<Wheel> wheels = new List<Wheel>();
void AddWheel ( Wheel WheelToAdd)
{
wheels.Add(WheelToAdd)
//Some Other logic relating to adding wheels here
}
}
}
到目前为止一切顺利。但是,如果我想让我的车轮有一个 Car 属性来说明它与哪辆父车相关怎么办。像这样
public class Wheel {
private Car parentCar;
public Car
{
get
{
return parentCar
}
}
}
将轮子添加到汽车时,您会在什么时候设置轮子的父属性?您可以在 Car.AddWheel 方法中设置它,但 Wheel 对象的 Car 属性必须是读/写,然后您可以在 AddWheel 方法之外设置它,从而造成不一致。
任何想法,非常感谢
最佳答案
更好的设计方法,(领域驱动设计)规定你应该首先决定这些实体的领域模型要求是什么......并不是所有的实体都需要独立访问,如果 Wheel
属于这一类,它的每个实例都将始终是 Car
对象的子成员,您不需要在其上放置 Parent 属性... Car
成为所谓的根实体,访问Wheel
的唯一方法是通过Car
对象。
即使 Wheel
对象需要独立访问,域模型要求也应该告诉您使用模式需要什么。任何 Wheel
是否会在没有父对象的情况下作为单独的对象传递?在那些情况下,Car
父项是否相关?如果父 Car
的身份与某些功能相关,为什么不简单地将完整的复合 Car
对象传递给该功能方法还是模块?必须单独传递包含的复合对象(如 Wheel
),但需要和/或相关父对象(它所属的对象)的身份的情况实际上不是一个常见的场景,并且使用上述类型的分析来接近您的设计可以避免您向系统添加不必要的代码。
关于c# - 面向对象设计父子关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3875021/