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

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

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

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

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

  • Data Transfer Object
  • Value Object
  • Array

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

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

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

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

2. дебажить передаваемые объекты моделей удобно, но только до тех пор, пока Вы не решились логировать модели

Всем удачки.

Оцени публикацию:
  • 2,6
Оценили человек: 2

Похожие статьи:

Справочники и учебники:


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Введите изображенные цифры:
Captcha
Главная
X

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2017 YaPro.Ru

Главная » Веб-мастеру » PHP »