Объекты JPA и / против DTO

Какова общая идея, помогающая решить, когда использовать DTO, а когда использовать Entity в этих случаях?

  1. Пользовательский интерфейс / Java на стороне сервера, вызывающие сервисы. Должен ли он получать / отправлять объекты или DTO?
  2. Веб-служба, вызывающая службы. Должны ли службы принимать сущности или DTO?

Мне нравится читать код, который передает сущности:

  1. проще передавать, нет необходимости отображать DTO
  2. не нужны дополнительные классы
  3. отношения с другими сущностями уже определены, поэтому нет необходимости объединять связанные DTO в один DTO
  4. , просто POJO

. Но есть аргументы о том, что DTO, которое отображается на объект, безопаснее, потому что это контракт, и объект может изменяться в любую форму, и DTO останется прежним. Например, как у объекта есть имя поля, так и у DTO также есть имя поля. Позже, если требование изменится, таблица базы данных изменяется, сущность также может измениться, изменив имя на firstName и lastName. Но у DTO по-прежнему будет имя поля, которое будет firstName + lastName.

Итак, вот список плюсов использования DTO:

  1. обратная совместимость с точки зрения кода, который принимает DTO

Минусы DTO, о котором я могу думать, это:

  1. должны определить классы DTO и сопоставление (возможно, с использованием dozer)
  2. программисты должны будут проанализировать, когда использовать DTO и сущность, я имею в виду, что передача DTO для каждого метода является беспорядок
  3. накладные расходы на преобразование сущностей в DTO и наоборот
  4. Я все еще не уверен в отношении «один ко многим» в том, как их отображать. В JPA мы можем лениво инициализировать это, но при переходе в DTO, должен я инициализировать это или нет. Вкратце, DTO не могут иметь ленивых инициализированных прокси, только содержат значения. кажется грязным. Публичный API класс (включая аннотации к публичным методы) больше не определяет цель контракта это представление. Класс закончится методы, которые актуальны только тогда, когда класс используется как DTO и некоторые методы, которые будут только актуально, когда класс используется как целое. Опасений не будет чисто отделены, и все будет более тесно связаны. Для меня это более важное рассмотрение дизайна затем пытаясь сэкономить на количестве файлы классов созданы.

    pro entity :

    Абсолютно НЕТ !!!

    JPA-объекты отображаются в базу данных, но они не «привязаны» к базе данных. Если база данных изменяется, вы меняете сопоставления, а не объекты. В объекты остаются прежними. Это в целом!

22
задан Bato-Bair Tsyrenov 25 July 2018 в 08:44
поделиться