MVC с веб-сервисами - PullRequest
       8

MVC с веб-сервисами

1 голос
/ 01 мая 2011

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

Приложение Уровень представления - это MVC.

1- Модель: содержит методы базы данных (используется ORM).

2- Контроллер: содержит вызовы методов модели, а также методы для обработки простых действий просмотра.

3- Просмотр: содержит только содержимое рендеринга.

Итак, можете ли вы дать мне простой сценарий, как я могу комбинировать веб-сервис с моим MVC-приложением, я предлагаю разделить модель как веб-сервисы, верно?

Ответы [ 3 ]

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

Я бы справился с этим следующим образом: (YMMV) * ​​1001 *

  • Создайте сборку уровня данных, охватывающую весь ваш доступ к данным.Назовите это DAL.Он будет содержать все методы доступа к данным.Это позволит повторно использовать, но также позволит использовать методы, используемые одним приложением ниже.Это где ваша модель EF может жить.

  • Создание 2 веб-проектов: MVC и веб-сервисов.Каждый из них реализует бизнес-логику, чтобы удовлетворить свои соответствующие требования.Они будут ссылаться и вызывать DAL по мере необходимости для доступа к данным.Как вы заметили, они оба являются сервисами уровня представления.Один из них имеет пользовательский интерфейс, другой - конечную точку связи для удаленных пользователей веб-служб.

  • При необходимости разверните оба на сервере приложений.Предложите создание 2 приложений / сайтов в IIS - (т. Е. «Web» и «WebServices»).Такое разделение приложений гарантирует, что одно может быть изменено / сокращено / версионировано без влияния на другое.

  • Проект / приложение MVC по-прежнему будет иметь свои Модели, Представления и Контроллеры, как обычно.Самое большое изменение здесь - это то, что Модели будут использоваться только для ViewModels по мере необходимости.Он будет содержать любую бизнес-логику для удовлетворения требований пользовательского интерфейса.Его методы контроллера будут вызывать соответствующие общедоступные методы DAL по мере необходимости.

  • Проект / приложение веб-служб можно будет изменять независимо по мере необходимости, при этом доступ к данным останется.

1 голос
/ 01 мая 2011

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

Например, поскольку вы говорите, что MVC является вашим уровнем представления , вы можете вставить веб-службы в качестве слоя между моделью и контроллером. Вместо прямого вызова вашей модели (уровня данных) Контроллер вызывает ваши веб-службы и предоставляет веб-интерфейс для служб, которые в противном случае были бы доступны через ваш SOAP API.

Другой вариант заключается в том, чтобы и ваш внешний интерфейс MVC, и службы SOAP обращались к общему логическому слою бизнес / данных, каждый из которых предоставлял свой собственный «API» для одного и того же внутреннего сервера.

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

1 голос
/ 01 мая 2011

1) Поместите все свои сервисные операции за интерфейс.

2) Подумайте об использовании контейнера Inversion of Control, чтобы использовать внедрение зависимостей в вашем приложении. Это позволяет вам легко смоделировать ваши зависимости и тестировать логику контроллера. Вот некоторые примеры: Windsor , Ninject , StructureMap .

3) Рассмотрите возможность использования моделей представлений со строгим шрифтом вместо объектов, с которыми работает ваш ORM. Вы можете настроить некоторые классы отображения, чтобы помочь справиться с этим, но большую часть боли можно снять, используя что-то вроде AutoMapper .

Вот несколько хороших ссылок на эту тему:

...