DTOs и интерфейсы

Я недавно натыкался на этот шаблон (?) в нашем коде и задающийся вопросом, как это полезно, если вообще. У нас есть приложение Spring и использование фронтенда Flex BlazeDS. Было решено, чтобы мы использовали интерфейсы на нашем DTOs, как так:

Java


public interface ISomeDTO {
       Integer setId();
       void getId(Integer i);
}

public class SomeDTO implements ISomeDTO
{
..
}


Actionscript


public interface ISomeDTO {
       var id:Integer;
}

public class SomeDTO implements ISomeDTO
{
..
}


Что делает интерфейс на усилении DTO Вы? Это легкие объекты с абсолютно нулевой логикой. DTOs имеют смысл, интерфейсы имеют смысл, но не вместе.

5
задан unscene 22 January 2010 в 02:54
поделиться

2 ответа

Я не понимаю, почему интерфейсы и Dто не будут работать вместе.

Рассмотрим завод / ассемблер, который создает доменные объекты из DTO. Вы можете настроить завод с стратегиями, чтобы он мог создавать определенные реализации объекта домена на основе типа DTO, который он дан. Dто в идеале будет набран в интерфейс здесь. (Это работает в противоположном направлении).

Я не говорю, что вы должны поставить каждый DTO за интерфейсом, но так же, как и с доменными объектами, наверняка будет случаев, когда это полезно для этого.

3
ответ дан 14 December 2019 в 13:36
поделиться

в среде на основе транзакций DTOS используются для разделения объектов базы данных из базовой сессии БД.

Эти сеансы обычно недоступны, и большинство сущностей состоят из прокси, которые лениво нагружаются коллекции участников. Поэтому, если вы должны были получить доступ к имуществу коллекции на прокси-объекте, прокси загружает коллекцию на данный момент времени, что существует транзакция базы данных или нет. Таким образом, доступ члена субъекта может появиться неисправность, когда нет активной транзакции.

Именно это происходит, когда вы отправляете свои объекты на вид, который пытается получить доступ к участнику. Поскольку обработка транзакций обычно определяется в сервисном слое, в представлении / контроллере нет активной транзакции.

Обведите курсивом этой проблемы, существуют разные подходы:

  • Держите сеанс открытой через E.G. Механизм фильтра (Spring's OpensessessiveViewfilter), хотя и строго говоря, это анти-шаблон
  • , пусть DAOS вернет объекты передачи данных, заполненные необходимыми элементами, уже инициализированными

, надеюсь, это помогло.

3
ответ дан 14 December 2019 в 13:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: