假如有几间房子,几件家具,每件家具都有一个ID号对应一间房子问题:当我想添加一件新家具的同时,想给它一个对应房子的ID号,请问如何设计?Class House
{
   List<Fitment> fm;
}Class Fitment
{
   int Insert(//参数对应Fitment的属性列表);
}Fitment类需要加房间ID号这个属性吗?如果要加,那House里面的 fm 感觉没啥意义了。
因为在现实生活中,家具被创造出来时,还不属于任何房间,也就是一开始没有房间ID号这个属性,必须在后期通过对象的一个“指定房间”的方法来指定房间ID号,也就是要在House 类中加一个添加家具的方法。有点糊涂,应该是在House中添加家具时指定家具的房间ID,还是在家具构造时候就指定房间ID?谁能写一段完整的代码参考。

解决方案 »

  1.   

    聚合关系中,部分可以独立于聚合而存在
    Class House
    {
    }
    Class Fitment
    {
     public House house{get;set;}
    }
    没有分配房间时house就是null
      

  2.   

    你这样跟组合好像是反向的,第一次见,有的迷惑。请问“给家具分配房间ID”这个方法怎么实现?能写段代码吗?Insert(//参数);//主要是这里面的参数有没有房间ID
      

  3.   

    public Fitment
    {
       public int ID {get;set;}
       public string Name {get;set;}
       public House house {get;set;}   public int Insert(House _house)
       {
          this.house = _house;
          return DataProvider.InsertFitment(this.ID, this.Name, house.ID);
       }
    }
    这样行吗?
      

  4.   

    Class House
    {
      List<Fitment> FitmentS{get;privite set;}//房间has家具,实际上只需get即可,因为
    //list<XX>本身就是可操作的列表,外面 house.FitmentS.add()、house.FitmentS.Insert()都可以}
    Class Fitment
    {
        // 没必要再家具上提供Insert方法,原因上面已经说了
    }对象分析上就是如此,至于你的困惑,实际上是把实例和class混了,实例才具有自己的特殊属性另外产生这个困惑的另一个原因是:你把关系数据库的那套理论参入进来了,而对象分析本来和关系数据库间是有不适配的地方的(不然也不会出啥ORM了这类幺蛾子框架了)
      

  5.   

    不过我这里的Insert,其实就是访问数据库的一个方法,而不是描述数据结构的。要解决房间ID在什么地方加入进来的问题,就是为了解决插入数据库时,是通过Insert的参数啊,还是构造,并且这个Insert放在House中,还是Fitment中合适?