C# 航程、预订、预订服务-在哪里进行容量检查

C# 航程、预订、预订服务-在哪里进行容量检查,c#,service,domain-driven-design,C#,Service,Domain Driven Design,我是领域驱动设计的新手,希望听听您对设计决策的看法: 在我的领域中,我有实体“航行”和“预订”。 voyage的构造函数如下所示: public Voyage(VoyageNumber voyageNumber, Schedule schedule, IList<VoyagePrice> voyagePrices, Location location,

我是领域驱动设计的新手,希望听听您对设计决策的看法: 在我的领域中,我有实体“航行”和“预订”。 voyage的构造函数如下所示:

public Voyage(VoyageNumber voyageNumber,
                  Schedule schedule,
                  IList<VoyagePrice> voyagePrices,
                  Location location,
                    Capacity capacity)
public Booking(BookingNumber bookingNumber,
        Customer customer,
        Voyage voyage,
        IList<ConfirmedPerson> confirmedPersons)
公共航程(VoyageNumber VoyageNumber,
时间表,
IList航运公司,
地点,,
容量(容量)
值对象“voyagePrices”包含特定人员类型(儿童、成人等)的价格信息。载客量包含航程中允许的最大人数

“预订”的构造函数如下所示:

public Voyage(VoyageNumber voyageNumber,
                  Schedule schedule,
                  IList<VoyagePrice> voyagePrices,
                  Location location,
                    Capacity capacity)
public Booking(BookingNumber bookingNumber,
        Customer customer,
        Voyage voyage,
        IList<ConfirmedPerson> confirmedPersons)
公共预订(预订号码预订号码,
客户,,
航程,
IList确认人)

confirmedPersons包含客户想要预订的人员列表(即2名成人,1名儿童)。现在,在允许保存预订之前,当然需要检查航次的容量。我不认为“航行”应该包含所有预订的清单。检查预订服务或预订工厂的容量可以吗?你有什么建议吗,也许是一个小的代码片段?谢谢大家!

将可用容量作为航行或类似布尔封装的一部分是完全可能且有效的

  Voyage.isFull()
从旅行者储蓄中检索特定航次汇总后,即可获得该信息

然而,这还不够,在你从航海家仓库取回航程后,航程总有可能填满。所以你需要处理这种特殊情况,也许像

  public interface BookingService {
     Booking book(BookingRequest br) throws VoyageIsFullException; 
  }
你可能会想要一个订书工厂

 public class BookingRequestFactory {
    public static BookingRequest create(Voyage v, Customer c, IList<Person> travelers)
 }
公共类BookingRequestFactory{
公共静态预订请求创建(航次v、客户c、IList travelers)
}

BookingRequestFactory可以进行一些基本的验证,但并不是全部,因为它是否完整的逻辑可能需要协作,而不仅仅是在对象工厂中,并且可能最好由BookingService处理。

将可用容量作为航行或类似布尔封装的一部分是完全可能且有效的

  Voyage.isFull()
从旅行者储蓄中检索特定航次汇总后,即可获得该信息

然而,这还不够,在你从航海家仓库取回航程后,航程总有可能填满。所以你需要处理这种特殊情况,也许像

  public interface BookingService {
     Booking book(BookingRequest br) throws VoyageIsFullException; 
  }
你可能会想要一个订书工厂

 public class BookingRequestFactory {
    public static BookingRequest create(Voyage v, Customer c, IList<Person> travelers)
 }
公共类BookingRequestFactory{
公共静态预订请求创建(航次v、客户c、IList travelers)
}

BookingRequestFactory可以进行一些基本的验证,但不是全部,因为它是否完整的逻辑可能需要在对象工厂之外的协作,并且可能最好由BookingService来处理。

如果我没听错,您必须连接这两个实体。我建议您像在关系数据库中一样进行操作。浏览到此链接:并阅读“多对多关系”一段,我认为这可能是一个解决方案:-)

如果我没记错,您必须连接这两个实体。我建议您像在关系数据库中一样进行操作。浏览此链接:并阅读“多对多关系”一段,我认为这可能是一个解决方案:-)

一个非常深思熟虑的答案!谢谢你对预订请求的提示。一个非常周到的回答!谢谢你给我关于预订请求的提示。