В вашем случае я бы получал OrderItem напрямую по URL /OrderItem/1234
.
Лично я не пытаюсь абстрагировать постоянство (я не использую шаблон репозитория). Кроме того - я не следую за репозиторием по принципу совокупного корня. Но я изолирую модель предметной области от постоянства.
Основная причина этого в том, что почти невозможно полностью абстрагировать механизмы персистентности. Это дырявая абстракция (например, попробуйте указать энергичную / ленивую загрузку для ORM, которая находится под API-интерфейсом хранилища без загрязнения).
Другая причина - не имеет большого значения, каким образом вы сообщаете данные. Репортажная часть скучна и относительно неважна. Реальная ценность приложения в том, что оно может сделать - автоматизация процессов. Поэтому гораздо важнее, как ваше приложение ведет себя, как ему удается оставаться согласованным, как взаимодействуют объекты и т. Д.
Обдумывая эту проблему, хорошо помнить Закон Деметры . Суть в том, что его следует применять только , если мы явно хотим скрыть внутренности. В вашем случае - мы не хотим скрывать позиции заказа.
Итак, используя тот факт, что мы знаем, что идентификаторы сущностей являются глобально уникальными (в отличие от уникальных только в контексте Порядка), это всего лишь кратчайший путь, и нет ничего плохого в их непосредственном извлечении.
Интересно, что это можно продвинуть вперед.
Даже инкапсуляция поведения может и тоже быть ослаблена .
например. - имеет смысл иметь orderItem.EditComments("asdf")
, чем order.EditOrderItemComments(order.OrderItems[0], "asdf")
.