Я разрабатываю бэкэнд для новой системы, и я попытаюсь использовать DDD. Я определил свои объекты DDD в Core-проекте, и я прочитал эти объекты с уровня сохранения, используя шаблон репозитория.DDD. Прочитать непосредственно из репозитория или использовать сущность?
Мне нужен сервис WCF, чтобы мои клиенты могли получить доступ к серверу. К и из этой службы WCF я отправляю/получаю DTO.
Допустим, у меня типичный сценарий Order, Orderrows. В моей службе WCF объявляю функцию
IEnumerable<DTO.OrderRows> GetOrderRowsForOrder(DTO.Order o)
Мне нужен совет, как реализовать этот метод. У меня есть два разных варианта.
Используйте мой домен-объект, чтобы прочитать порядок.
Core.Order order = _orderRepository.GetById(o.Id); IEnumerable<Core.OrderRow> orderRows = order.GetOrderRows(); IEnumerable<DTO.OrderRows> dtos = orderRows.Select(x => x.ToDTO()); return dtos;
Непосредственно используйте репозиторий для считывания ордеров.
IEnumerable<Core.OrderRow> orderRows = _orderRowsRepository.GetOrderRowsForOrder(o.Id); IEnumerable<DTO.OrderRows> dtos = orderRows.Select(x => x.ToDTO()); return dtos;
Для меня выбор 1 выглядит более 'объектно-ориентированный', но выбор нет. 2 выглядит проще и эффективнее.
Вопрос, какой из них использовать при использовании DDD? Уместно ли здесь использовать DDD?
(Это, конечно, простой пример, но что, если мне нужно, чтобы получить orderrows для списка заказов?)
Поскольку контекст явно разработан под управлением домена, я не согласен с вашим ответом. Определение Агрегатных Корней является решающим фактором здесь. –
Я читал об общих корнях, и это имеет смысл. Но как насчет моего второго вопроса, подходит ли DDD для использования здесь? –
@ErikZ: Это действительно зависит от вашего приложения. DDD - это не то, что вы применяете к небольшой части вашего приложения. Если вы решите использовать DDD, этот выбор управляет полной архитектурой вашей модели домена и окружающего кода. –