Сервисный уровень MVC + распространен в Zend или PHP? - PullRequest
11 голосов
/ 19 сентября 2010

Вы, вероятно, слышали о различии между Жирная модель / Тонкий контроллер и Тонкая модель / Жирный контроллер.Недавно я слышал, что вы можете иметь что-то среднее между тем, что некоторая логика из модели переходит на уровень обслуживания.Насколько это распространено?и знаете ли вы (или можете придумать) какие-либо реальные примеры, иллюстрирующие это?

Ответы [ 3 ]

23 голосов
/ 19 сентября 2010

Мартин Фаулер описывает шаблон уровня обслуживания своей великой книги Шаблоны архитектуры корпоративных приложений . Если вас интересуют вопросы, подобные тому, который вы задали, прочитайте эту книгу.

Мне приходит в голову одно использование: управление транзакциями базы данных . Некоторые люди пытаются инкапсулировать запуск и совершение транзакций в своих моделях домена. Но затем они запутываются, когда доменные модели вызывают другие доменные модели, которые также пытаются запустить и зафиксировать транзакции БД. Итак, какая модель действительно может решить, совершена ли транзакция или откатана? А что делать, если данная модель по-разному используется разными клиентами?

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

Что касается того, насколько это распространено, я не думаю, что это вообще распространено. Большинство людей, использующих Zend Framework (или любую другую платформу PHP или Ruby), едва перешли от «Active Record решает все» к новому блестящему «Data Mapper решает все». Кажется, это сообщество изучает только один новый шаблон каждые пять лет. Некоторое время они не доберутся до уровня обслуживания.


Комментарий от @ktutnik:

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

Еще один способ думать о них - это их связь с моделью предметной области. Репозиторий используется между моделью предметной области и базой данных. Принимая во внимание, что уровень обслуживания использует одну или несколько моделей домена.

Service Layer --->  Domain Model(s) ---> Repository ---> DBAL
7 голосов
/ 19 сентября 2010

Уровень обслуживания Адвокация является относительно новой и все еще подлежит различным интерпретациям.Я думаю, что это означает наличие слоя, который использует модели нескольких доменов, которые называют контроллеры (хотя, возможно, я слишком упрощаю его).Недавно я разработал веб-сайт с использованием этого и практических преимуществ, с которыми я столкнулся:

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

  2. Гибкость,В середине проекта я решил изменить основной функционал и смог сделать это безболезненно;что позволяет мне быстро взвесить все за и против обновления.Эта гибкость полезна, когда быстрое создание прототипа, и внушает определенную уверенность, потому что если вам нужно вернуться к чему-то, это не будет кошмаром.

  3. Расширяемость.Я уже определил службы в своем приложении, которые я могу предвидеть открытием для других разработчиков или других виджетов, мобильных приложений в будущем.Теоретически это делается только путем добавления аутентификации и авторизации к сервису (поскольку функции уже находятся на его собственном уровне, и мне не нужно тратить время на попытки отделить то, что я хочу показать, от остальной части кода.).

  4. Услуги легко добавлять и удалять (возможно, это относится к одному из предыдущих пунктов).У меня есть услуги, которые относятся к определенной стадии проекта (например, этап «Только приглашение»), которые я могу отменить после завершения этой фазы.

Я думаю, что у нее есть практические преимущества и ключДля успеха в реализации есть хороший способ управления службами в приложении.Я использую компонент инжекции зависимостей Symfony

0 голосов
/ 01 октября 2010

См. ZFEngine, это cmf на ZF с реализацией сервисного уровня

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...