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