Полностью согласен с идеей сервисного уровня, хотя это действительно зависит от того, что у вас работает.
Наш подход состоит в том, чтобы использовать такой слой, как, по сути, фасад для гаек под ним - он описывает API нашего приложения таким образом, что имеет смысл для людей, которым приходится кодировать его. Кодирование с использованием этого API скрывает пользователя от того, о чем он не беспокоится, например от хранения и извлечения данных.
Что нам показалось приятным в этом подходе, так это то, что он имеет смысл семантически, правильное разделение задач делает контроллеры тонкими и обеспечивает мобильность модели (не то, что мне когда-либо приходилось этим пользоваться, но кто знает) легко проверять, масштабировать - мы можем легко создавать другие слои поверх (например, веб-сервисы) и т. д. и т. д.
Я слышу, откуда ты, потому что я был там не так давно. Долгое время я был озадачен тем, как реализовать модель с Zend Framework. Я искал соглашение или кого-то, чтобы описать, как это должно быть сделано.
То, что я узнал со временем, - это то, что нет правильного ответа, и именно здесь ZF получил его абсолютно точно. Просто не имеет смысла предписывать механизм, когда не существует подхода «один размер подходит всем».
Таким образом, нет «правильного» способа реализации модели. Как я уже сказал, я думаю, что это просто найти что-то разумное для вашей собственной ситуации.
Мой совет для Google по поводу "Zend Framework Service Layer" и прочитайте как можно больше об этом - я думаю, что это может вас заинтересовать. Чаще всего вы возвращаетесь к переполнению стека, но обычно есть ссылки на хорошие посты и статьи в блогах.
Удачи.