I’m new to domain driven design and would like to hear your thoughts on a design decision:
In my domain, I have the entities “voyage” and “booking”.
The constructor for voyage looks like this:
public Voyage(VoyageNumber voyageNumber,
Schedule schedule,
IList<VoyagePrice> voyagePrices,
Location location,
Capacity capacity)
The value objects “voyagePrices” contain information about the price for a certain person type (child, adult, etc.). The capacity contains the maximum number of persons allowed on the voyage.
The constructor for the “Booking” looks like this:
public Booking(BookingNumber bookingNumber,
Customer customer,
Voyage voyage,
IList<ConfirmedPerson> confirmedPersons)
confirmedPersons contains the list of persons one customer wants to book (i.e. 2 adults, 1 child). Now, it is of course required to check the capacity of the voyage before allowing the booking to be saved. I dont think that “voyage” should contain a list of all the bookings made. Would it be okay to check the capacity in a BookingService or in a BookingFactory? Do you have any suggestions, maybe with a small code snippet? Thank you!
It completely possible and valid to have an available capacity be part of a Voyage or a boolean encapsulation like
Upon retrieval of a specific voyage aggregate from a VoyageRepository this information could be obtained.
However it’s not enough, there’s always a chance the voyage fills up after you’ve retrieved it from the VoyageRepository. So you will need to handle that exceptional case, maybe like
And you’d probably want a BookingRequestFactory
BookingRequestFactory can do some basic validation but not all cause the logic of whether it’s full or not will probably require collaboration beyond what’d you’d want in a Object Factory, and is probably best handled by a BookingService.