15/1/09

singalen: (Default)
Это, пожалуй, будет статья.

Клиент-серверная архитектура плюс логика на клиенте и сервере плюс data persistence породили целое семейство потомков паттерна DTO.

Вот, к примеру:
  • "Обычный" DTO: аки пчёлка, переносит данные между клиентом и сервером;
  • Валидируемый (обычно GUI-шный) DTO - DTO, логика поведения/валидации которого вынесена во внешний (stateless) класс;
  • "Недозаполненный" DTO -
    • Identity-only DTO, который нужен только для проверки identity или equality - в таком достаточно заполнить поле id;
      Например, на случай, когда можно передать только id объекта, а можно и готовый объект - когда у нас объекты не закэшированы, и вызываемый код может загрузить их сам, а может воспользоваться уже загруженными.
    • DTO как критерий поиска: это м.б. один DTO или пара DTO, если нужно задать интервал значений;
    В этом случае я, конечно, приспосабливаю DTO к задачам, которые ему изначально не свойственны - с одной стороны. С другой стороны, сущностей становится меньше: мы обходимся без класса XXXSearchCriteria и без лишних сигнатур методов, которым пришлось бы принимать или объект, или id.
  • DTO как предок/интерфейс rich object-а с поведением. Может содержать внутри другой, "обычный" DTO, чтобы не дублировать группу полей.
Ну, ещё Local DTO у Фаулера.