Я разрабатываю приложение в Zend Framework и имею следующие уровни: контроллер, сервис, модель предметной области и сопоставитель.
Объекты моего домена должны быть представлены в виде массивов для нескольких разных целей. Например, преобразователь преобразует объект в массив перед его сохранением; форма требует массив в качестве параметра своего метода populate()
; и есть еще несколько примеров.
Итак, мой вопрос: в каком слое я должен выполнять перевод в массив? Перевод объекта немного различается в зависимости от контекста, в котором он используется, например. идентификатор объекта не требуется при сохранении нового объекта, но требуется при сохранении обновлений или при заполнении формы.
Насколько я вижу, есть два варианта. Вариант 1 — выполнить перевод в каждом компоненте (то есть в маппере, форме и т. д.). Вариант 2 — поместить его в сам объект домена и позволить клиентскому коду передать параметр, чтобы определить, какой вариант массива им требуется, например. $array = $domObject->toArray('populateForm');
Вариант 1 предполагает достаточное количество дублирования, но, похоже, придерживается правила разделения интересов. Вариант 2 позволит избежать дублирования, но я не уверен, что объект предметной области должен представлять себя различными способами.
Возможно, доменный объект должен просто создавать «ванильный» массив, и каждый компонент должен адаптировать его для собственного использования? И еще один момент касается узоров. Должен ли я искать применить декоратор или какой-либо другой шаблон?
Ваши мысли очень ценятся!