Value Object VS Data Transfer Object (VO VS. DTO)

Автор: Aport Пятница, Январь 30th, 2015 Нет комментариев

Рубрика: Разное

Решил разобраться и рассказать, в чем отличие этих паттернов.

Функционал DTO VO
простой объект (контейнер данных) да да
объект можно сериализовать, т.е. объект не должен иметь препятствий для сериализации, например: не должен иметь бесконечно вложенные ссылки на самого себя в каком-то поле да да
имеет поле с значением уникально идентифицирующим данный объект да нет
может содержать get-еры, set-еры (их наличие хороший тон в сочетании с приватными полями) да нет
обязан содержать только публичные поля (логически аналогичен массиву) нет да
является моделью (содержит бизнес-логику — обрабатывает находящиеся в нем значения полей) нет нет

Вот и разобрались.

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

  • Data Transfer Object
  • Value Object
  • Array

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

Естественно, Вы можете придерживаться нескольких или сразу всех типов данных, но об этом должно быть известно всем программистам, которые работают над Вашей программой.

Еще, не рекомендую Вам использовать паттерн Model, особенно, если в Вашей программе Модели каким-то образом связаны друг с другом, т.к. это сильно затрудняет читаемость кода и увеличивает время на разработку.

Всем удачки.

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты