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