DDD Обязанности Контроллера по применению MVC

Я рефакторинг приложения для DDD, и пока все хорошо, но у меня возникло сомнение относительно ответственности и каковы наилучшие подходы для ее решения.

Приложение представляет собой веб-приложение, которое используют агенты центра обработки вызовов, с функциями CRM, а бэкэнд представляет собой REST API.

Вариант использования следующий: агент звонит клиенту и ему необходимо собрать некоторую информацию / предложить рекламные акции и т. Д. После того, как он позвонил клиенту и поговорил с ним, ему необходимо заполнить некоторую информацию для этой попытки контакта, часть этой информации является комбинированной. поле с данными, заполненными из базы данных, и оно отправляет запрос POST с идентификаторами объектов в конечную точку для его регистрации.

Таким образом, у нас есть конечная точка contactAttempt, которая получает данные, customerId, agentId, некоторую информацию о поле со списком (subjectId, reasonId, extraInfo1, extraInfo2), дополнительная информация не вызывает этого, а просто упрощает.

Эта информация десериализуется в объект DTO, который передается службе приложений, которая обращается к соответствующему хранилищу, чтобы проверить, действительны ли идентификаторы, и возвращает сущности. Если сущности не найдены, она выдает исключение, которое контролирует ловушка и отвечает клиент с сообщением.

Если все объекты действительны, существуют некоторые доменные правила, например, если это первый контакт с клиентом, отправка приветственного письма и прочее.

Я сомневаюсь, что с этими шагами по извлечению сущностей из репозитория, это должно быть так, или я должен получить его в контроллере, и если все, что мне нужно, присутствует, то я перехожу к службе домена только с логикой, необходимой для применения бизнес-правила?

  • Каковы плюсы и минусы упомянутых подходов?
  • Есть ли другие подходы?
  • Какова ответственность Контролера в контексте MVC?

1 ответ

MVC отвечает за десериализацию HTTP-запроса в сообщении для "прикладного уровня".

Таким образом, он должен получить из строки запроса / тела / заголовков все необходимые значения и передать службе в качестве неизменяемых значений (команда). Это связано с тем, что служба приложения (обработчик, что угодно) должна выполнять команду транзакционно, и если к объектам (таким образом, к поведению) обращаются за пределами уровня приложения, вы не можете быть уверены, что никаких изменений не произойдет за пределами уровня приложения.

Другие вопросы по тегам