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

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

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

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

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

  • Data Transfer Object
  • Value Object
  • Array

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

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

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

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

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

Всем удачки.

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

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

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


Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

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

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