Вполне возможно и допустимо иметь доступную емкость в составе Voyage или логической инкапсуляции, такой как
Voyage.isFull()
При получении определенного агрегата рейса из VoyageRepository эта информация может быть получена.
Однако этого недостаточно, всегда есть шанс, что путешествие заполняется после того, как вы извлекли его из VoyageRepository. Так что вам нужно разобраться с этим исключительным случаем, например,
public interface BookingService {
Booking book(BookingRequest br) throws VoyageIsFullException;
}
И вы, вероятно, захотите фабрику BookingRequest
public class BookingRequestFactory {
public static BookingRequest create(Voyage v, Customer c, IList<Person> travelers)
}
BookingRequestFactory может выполнять некоторую базовую проверку, но не все из них вызывают логику того, что она полная или нет, вероятно, потребует совместной работы сверх того, что вы хотели бы на фабрике объектов, и, вероятно, лучше всего ее обрабатывать с помощью BookingService.