Насколько я понимаю, контракты не существуют без автомобилей, следовательно, автомобили - это общий корень.
Это не обязательно так.«Не существует без» недостаточно для того, чтобы сущность стала частью совокупного корня.Рассмотрим классический домен обработки заказов.У вас есть Орден, который является Совокупным Корнем.У вас также есть Клиент, который является Совокупным Корнем.Заказ не может существовать без Клиента, но это не означает, что Заказы являются частью Агрегата Клиентов.В DDD сущности внутри одного агрегата могут иметь ссылки на другие агрегатные корни.Из DDD book :
Объекты в AGGREGATE могут содержать ссылки на другие корни AGGREGATE.
Aggregate - это единица жизненного цикла и обмена данными.По сути, это кластер объектов, который применяет инварианты.Это то, что вы хотите заблокировать, если у вас есть несколько пользователей, которые меняют домен одновременно.
Возвращаясь к вашему вопросу, я понимаю, что домен - это что-то вроде аренды / аренды автомобиля / грузовика / лимузина /бульдозер.Я думаю, что HireContract, возможно, не является частью совокупности автомобилей, потому что они могут иметь разные жизненные циклы, и HireContract имеет смысл сам по себе, без автомобилей.Кажется, что это скорее отношение Заказ-Продукт, которое также является классическим примером двух разных Агрегатов, ссылающихся друг на друга.Эта теория также подтверждается тем фактом, что бизнес должен видеть «Все контракты».Они, вероятно, не думают об автомобиле, содержащем все контракты.Если это так, то вам нужно сохранить свой ContractsRepository.
На несвязанной заметке вас может заинтересовать чтение этого ответа о дизайне интерфейса репозитория.