Я не уверен, что существует согласованная передовая практика, но я вижу много разговоров о сервисных уровнях при обсуждении Doctrine или Zend Framework.
Когда я запустил свое приложение с Doctrine, я попытался встроить как можно больше функциональных возможностей в свои объекты Entity, но быстро понял, что это почти невозможно без внедрения Entity Manager, что полностью разрушает идею простого непостоянства осознанные объекты, которые делают Doctrine 2 таким милым.
Если вы выходец из мира Active Record, вам легко представить вашу «модель» как отдельный объект, который соответствует таблице базы данных и контроллеры должны взаимодействовать с этими объектами. Это обычно хорошо для очень простых приложений CRUD. Но из-за подхода Доктрины делать это таким странным и разочаровывающим образом.
Вместо этого подумайте о различных слоях в вашем приложении. Doctrine - это слой, который находится поверх базы данных, ваши сущности располагаются поверх Doctrine, а ваш уровень обслуживания должен располагаться поверх ваших сущностей. Весь этот пакет - ваш M в MVC, и он включает в себя как постоянство данных, так и бизнес-логику.
Я бы посоветовал вам ознакомиться с этой презентацией по теме.
UPDATE
Первоначально я пропустил ту часть, где вы упомянули, что у вас были отдельные объекты модели, делающие вызовы к сущностям. Я думаю, что это будет приемлемый шаблон для использования. Если вы хотите писать тесты без выполнения вызовов базы данных, вы, вероятно, захотите использовать макет Entity Manager - это зависимость, независимо от того, в какой слой вы его поместите.