Используя Doctrine 2 и репозитории, какова цель уровня обслуживания? - PullRequest
8 голосов
/ 30 апреля 2011

Я проектирую свое приложение и использую Doctrine 2 и Zend Framework.

В настоящее время я написал все свои сущности, я собирался начать писать репозитории, и я подумал об услугах, и мне интересно, не будет ли мой слой Service повторять репозитории.

Стоит ли писать слой Service, когда я использую репозитории Doctrine 2?

Однако я тут и там читал, что слой Service можно использовать, например, для кэширования.

У вас есть пример реализации?

Ответы [ 2 ]

10 голосов
/ 01 мая 2011

Разница между репозиториями и сервисами заключается в том, что я позволяю моим сервисам принимать массивы данных для обновления, создания и т. Д. IIRC. Настоящий репозиторий должен работать только с объектами домена. Например, вы можете также использовать свой сервисный уровень для генерации миниатюр для продуктов, изображений профилей, кэширования и т. Д. Дело в том, что сервисы не связаны строго с работой с сущностями Doctrine.

Я все еще использую пользовательские репозитории в качестве контейнера для всех своих пользовательских запросов, а что нет; которые потребляются в моих классах обслуживания и иногда непосредственно в моих контроллерах. Хотя я использую свои сервисы для сериализации (для ответов JSON).

Есть еще небольшая серая область с тем, что должно быть где, и вы просто должны это почувствовать. В конце концов: если вы оставите сервисный уровень и поместите эту логику в свои репозитории, это все равно будет не такой уж большой работой для обслуживания и масштабируемости, просто меньше определения ответственности класса.

4 голосов
/ 26 мая 2011

Я долго искал пример правильной реализации (сервисный уровень, хранилище с доктриной 2 и ZF).
Этот лучший пример, который я нашел, должен помочь вам в вашей работе
https://github.com/epixa/Forum/tree/master/application/user/src

Еще одна вещь, http://martinfowler.com/eaaCatalog/serviceLayer.html это поможет понять теоретическую часть уровня обслуживания

...