Реализация сервисного уровня в архитектуре MVC - PullRequest
13 голосов
/ 29 августа 2009

Как обычно реализовать сервисный уровень в архитектуре MVC? Это один объект, который обслуживает все запросы к базовым бизнес-объектам? Или больше похоже на объект, который обслуживает различные сервисные объекты, которые, в свою очередь, взаимодействуют с бизнес-объектами?

Итак:

  1. Контроллер -> Сервис -> getUserById () или:

  2. Контроллер -> ServiceManager -> getUserService () -> getUserById ()

Кроме того, если последнее более уместно, вы бы сконфигурировали этот объект ServiceManager в начальной загрузке? Другими словами, зарегистрировать различные службы, которые вам понадобятся для вашего приложения, в диспетчере служб в начальной загрузке?

Если ничего из вышеперечисленного не подходит, что поможет мне лучше понять, как должен быть реализован уровень обслуживания?

Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 29 августа 2009

Как я читаю этот вопрос, на самом деле нужно ответить на две вещи:

A) Я бы предпочел разделить «Сервис» на «CustomerService» и «OrderService», другими словами, сгруппированные по понятиям домена.

B) Во-вторых, я бы использовал внедрение зависимостей, чтобы получить нужный сервис непосредственно там, где мне это нужно, поэтому я в основном использую alt 1. Добавленная абстракция в альтернативе 2 не дает мне никакого дополнительного значения, поскольку контейнер IoC делает важная часть.

3 голосов
/ 29 августа 2009
2 голосов
/ 29 августа 2009

Я лично предпочитаю # 2, и да, обычно он настраивается в начальной загрузке, или зависимости разрешаются с использованием какого-либо контейнера IoC, чтобы получить реальные конкретные экземпляры.

Я также хотел бы прокомментировать, и да, я понимаю, что это, вероятно, больше личного предпочтения. Старайтесь избегать использования слоя «Сервис» для этих объектов. называйте их репозиториями или чем-то еще. если вы используете сервис, этот термин становится перегруженным ... потому что тогда разработчики похожи на "вы имеете в виду лайк, отдых или сервис wcf?". поверьте мне, мы сделали это с недавним проектом, и мы все время путаем себя, когда говорим о том, где вносить изменения в код: -P

...