В программном коде важно понимать, какой блок кода за что отвечает.
Пример. В базе данных хранится длительность события. Длительность указана как целое число (int) и указывается в минутах. Информацию о событии мы готовим при помощи дата маппера и велик соблазн сразу же привести число в понятный человеку вид (135 → 2 ч. 15 мин.).
Однако за такую трансформацию должен отвечать не маппер, а создаваемый им объект. Задача маппера — быть посредником между областью домена и базой данных. При этом не имеет смысла трансформировать данные и на уровне представления: возможна ситуация, когда на основе объекта будут строиться несколько представлений и виджетов. Это рано или поздно приведет к дублированию кода.
Итак, в коде возвращаемого маппером объекта будет как свойство $duration, так и метод, возвращающий длительность в понятном человеке виде:
class Event extends DomainObject { $duration = null; public function durationOutput() { if ($this->duration < 60) return "{$this->duration} мин."; $hours = floor($this->duration/60); $min = $this->duration % 60; if ($min) return "{$hours} ч. {$min} мин."; return "{$hours} ч."; } }
Код расчета длительности приведен здесь для иллюстрации. В реальном проекте имеет смысл вывести его в отдельный класс для работы со временем.