Использование объектов данных для обмена между клиентом и микросервисами (asp.core) - PullRequest
0 голосов
/ 16 октября 2019

Обычно я создаю dto для получения данных от микросервиса (WebApi) к клиенту (MVC). Но иногда бывает неудобно дублировать структуру объекта данных до dto, особенно если объект имеет несколько полей и много встроенных отношений. Поэтому я должен дублировать поля и отношения.

  • Могу ли я использовать объект данных вместо dto?

  • Я использую специальную сборку для обмена dto между клиентом (MVC) и даннымmicroservice. Должны ли мои объекты данных жить в этой сборке?

1 Ответ

1 голос
/ 16 октября 2019

Это распространенная жалоба, возникающая из-за непонимания концепции ограниченного контекста. Поскольку вы глубоко в коде, вы просто видите две вещи, которые выглядят как одно и то же, и у вас, как и у всех разработчиков, возникла идея, что вам не следует повторяться (СУХОЙ).

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

1012 * Связанное понятие здесь антикоррупционные слои. Это слой, который вы добавляете в свое приложение для облегчения связи между двумя различными контекстами приложения или доменами. API - это форма антикоррупционного уровня. Опять же, поскольку вы создаете все приложения, кажется, что они все одно и то же. Однако представьте, что ваше MVC-приложение является сторонним приложением, созданным кем-то другим для использования вашего API. Должны ли они использовать ваши сущности напрямую? У них, вероятно, будут свои собственные классы сущностей и свое собственное хранилище данных. DTO, который использует ваш API, позволяет этим двум различным приложениям общаться на одном языке. Если вы используете свои классы сущностей напрямую, то любое изменение ваших данных требует изменения вашего API, что, в свою очередь, требует изменения любых потребителей вашего API. Представьте себе, если Google изменил столбец базы данных, и из-за этого каждый разработчик, использующий их API-интерфейс (ы), должен был немедленно внести изменения в свои собственные приложения, иначе они сломались бы. 1019 * выглядят одинаковыми, не означает, что они являются одинаковыми. Ваша сущность и ваш DTO являются представлениями концепции в разных контекстах , и поэтому вам нужны и должны быть оба.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...