为酒店设计课程

时间:2015-10-28 15:21:25

标签: java oop object

我即将设计一个具有对象列表的类,同样列表中的每个对象都是另一个对象列表。有没有更好的方法来设计这种情况?

在这里,如果我想遍历所有房间,我需要首先遍历楼层列表然后遍历房间。

例如:Hotel HAS =>楼层列表HAS =>房间清单

class Room
{
  int roomNo;
  boolean occupied;
}


class Floor
{
  int floorNo;
  ArrayList<Room> roomList = new ArrayList<Room>();
}

class Hotel
{
  ArrayList<Floor> floorList = new ArrayList<Floor>();
}

1 个答案:

答案 0 :(得分:1)

  

例如:Hotel HAS =&gt;楼层列表HAS =&gt;房间清单

开发人员需要停止尝试模仿对象之间的真实关系。仅仅因为你说“某种实体具有某种其他类型的实体”并不意味着它们都属于单个对象集群。

您需要注意的是您的对象模型将处理的用例(命令)以及在此过程中必须保护哪些不变量(规则)

如果不知道它将解决什么问题,你就无法想出一个好的对象模型。同样适用于更传统的数据结构;例如在不知道将使用的数据访问模式的情况下,您无法在ArrayListHashMap之间选择更合适的选项。

例如,如果您尝试为不应接受重叠预订的房间预订流程建模,则必须创建最小的数据集,以便您的对象模型完成此任务。

您是否需要将整个房间列表以及所有预订记录在一起以满足单人房预订?可能不是,那么为什么你需要一个Hotel对象,其中包含Floor的集合,而Room又会包含Room的集合?

您可能只需要一个Room聚合,其中包含自己即将发布的预订列表。

现在,出于查询目的,您可能仍希望能够列出特定楼层或酒店的所有房间,但不必通过对象引用来表达关系。如果floorId保留FloorhotelId保留public Request() { Contacts = new List<Contact>(); } public virtual ICollection<Contact> Contacts { get; set; } ,则可以通过数据库查询来完成这些查询。

我知道你的问题纯粹是学术问题,可能与现实生活中的问题无关,但你需要明白,对象模型不是仅仅依靠现实生活中的关系来制作的:你需要看看命令