面向对象的设计父/子关系

Mar*_*909 5 c# oop

这是关于使用对象创建父/子关系的一般最佳实践问题.

假设我有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
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.但是,如果我想让我的车轮的Car属性说出它与哪辆母车有什么关系呢?像这样的东西

 public class Wheel {

     private Car parentCar;
     public Car 
     {
        get
        {
         return parentCar
        }

  }

}
Run Code Online (Sandbox Code Playgroud)

将车轮添加到汽车时,您可以在此时设置车轮的父属性?您可以在Car.AddWheel方法中设置它,但是Wheel对象的Car属性必须是读/写,然后您可以在AddWheel方法之外设置它,从而产生不一致.

有任何想法,非常感谢提前

Cha*_*ana 9

更好的设计方法(域驱动设计)规定您应首先确定这些实体的域模型要求是什么......并非所有实体都需要独立访问,如果Wheel属于此类别,则每个实例都将始终是一个Car对象的子成员,你不需要在其上放置一个Parent属性... Car成为所谓的根实体,访问a的唯一方法Wheel是通过一个Car对象.

即使Wheel对象需要独立访问,域模型要求也应该告诉您使用模式需要什么.有Wheel没有任何东西作为一个单独的对象传递,没有它的父母?在那些情况下Car父母是否相关?如果家长的身份Car 相关的一些片的功能,你为什么不只是传递完整的复合Car物,以该方法或模块?包含的复合对象(如a Wheel)必须自己传递的情况,但父级的身份(它所属的对象)是需要和/或相关的,实际上并不是常见的场景,并且接近你的设计使用上述类型的分析可以避免您向系统添加不必要的代码.