Какова общая идея помочь решить, когда использовать DTO и когда использовать Entity в этих случаях?
- Пользовательский интерфейс / серверная часть java, вызывающая сервисы. Должны ли они получать / отправлять объекты или DTO?
- Веб-сервис, вызывающий сервисы. Должны ли службы принимать организации или DTO?
Мне нравится читать код, который передает сущности:
- проще проходить, нет необходимости сопоставлять с DTO
- не нужны дополнительные классы
- отношения с другими объектами уже определены, поэтому нет необходимости объединять связанные DTO в один DTO
- просто POJOs
Но есть аргументы в отношении DTO, которые сопоставляют сущность более безопасно, потому что это контракт, и сущность может измениться на любую форму, и DTO останется прежним. Например, как у сущности есть имя поля, так и у DTO также есть имя поля. Позже, если требование изменится, таблица базы данных изменится, сущность также может измениться, сменив имя на firstName и lastName. Но DTO по-прежнему будет иметь имя поля, которое firstName + lastName.
Итак, вот список плюсов использования DTO:
- обратно совместимый с точки зрения кода, который принимает DTO
Минусы DTO, о которых я могу подумать:
- необходимо определить классы DTO и отображение (возможно, с помощью dozer)
- программистам придется анализировать, когда использовать DTO и сущность, я имею в виду, что передача DTO для каждого метода - беспорядок
- накладные расходы на преобразование сущностей в DTO и наоборот
- Я все еще не уверен насчет отношений один-ко-многим, как их сопоставить. В JPA мы можем лениво инициализировать это, но при переходе в DTO, должен ли я инициализировать это или нет. Вкратце, DTO не могут иметь ленивые инициализированные прокси, только содержат значения.
Пожалуйста, поделитесь своими мыслями ..
Спасибо!
Вот несколько цитат из разных мест
pro dto :
Повторное использование класса сущности в качестве DTO
кажется грязным Публичный API
класс (включая аннотации на публику
методы) более четко не определяет
цель договора это
Предъявление. Класс закончится с
методы, которые актуальны только тогда, когда
класс используется как DTO и
некоторые методы, которые будут только
актуально, когда используется класс
как сущность. Опасений не будет
чисто разделены и все будет
более тесно связаны. Для меня это
более важное соображение дизайна
затем пытается сэкономить на количестве
файлы классов созданы.
pro entity :
Абсолютно НЕТ !!!
объекты JPA отображаются в базу данных,
но они не привязаны к базе данных.
Если база данных меняется, вы меняете
сопоставления, а не объекты.
объекты остаются прежними. Это
Весь смысл!