我正在开发一个在线预订系统,并且出现了令人困惑的事情,我不确定我是否在DDD方面“做得对”。
在我的预订系统中,我(目前)有一个AvailableSlot
聚合根,但这感觉不对。 AvailableSlots
本质上是价值对象,根据员工和服务类型计算,它们没有身份,只代表特定日期,时间和可用于特定服务的员工。
以下是我将如何检索一系列AvailableSlots
/// invokes web service to fetch all available slots calculated from employee, service and dateTime.
var availableSlots = await uow.AvailableSlots.GetAvailableSlotsAsync(employee, service, dateTime);
然后我可以使用它来安排预约(您只能安排在可用插槽上预约)。
var appointment = selectedSlot.ScheduleAppointment( );
uow.Appointments.Add(appointment);
uow.SaveChanges( );
这样做可以让我保持在域内紧密构建和预约约束的业务不变量。
我很难解释为什么AvailableSlot
更类似于值对象,所以应该如此,但我仍然需要从后端Web服务获取此数据。我在这里错过了什么吗?或许另一个聚合根?包含AvailableSlots
的集合。