Здесь есть два подхода: то, что я называю подходом «говорите, не спрашивайте», а другой - это подход ViewModel / DTO.
По сути, вопросы вращаются вокруг того, что является «моделью» на ваш взгляд.
Скажите, не спрашивайте, требует, чтобы единственный способ, которым объект мог быть выведен наружу, - это сам объект. Другими словами, для рендеринга объекта у вас будет метод рендеринга, но этот метод рендеринга должен будет взаимодействовать с интерфейсом.
Примерно так:
class DomainObject {
....
public function render(DomainObjectRenderer $renderer) {
return $renderer->renderDomainObject(array $thegorydetails);
}
}
В контексте Zend Framework вы можете создать подкласс Zend_View, и ваш подкласс сможет реализовать этот интерфейс.
Я делал это раньше, но это немного громоздко.
Второй вариант - преобразовать модель вашего домена в объект ViewModel, который похож на упрощенное, выровненное, «заштрихованное» представление ваших данных, настроенное для каждого конкретного представления (с одной ViewModel на представление) Обратно преобразуйте данные POST в EditModel.
Это очень популярный шаблон в мире ASP.NET MVC, но он также похож на шаблон класса "DTO", используемый для передачи данных между "слоями" в приложении. Вам нужно было бы создать мапперы, чтобы сделать грязную работу за вас (на самом деле, в отличие от DataMapper). В PHP 5.3 вы можете использовать отражение для изменения частных свойств, так что вашему DomainObject даже не нужно выставлять себя!