2012-05-18 2 views
5

Я провел несколько поисков, но не нашел ответа на эту проблему.Какая правильная архитектура для MVC4 WebAPI

Хорошо, моя архитектура MVC 3, как это:

- Project.EDM (contains only the entity framework edmx file and its .tt and .cs entity classes) 
- Project.DAL (contains IXxxRepositiory and XxxRepository where CRUD is performed on the entity classes) 
- Project.Web (the MVC3 project. Controllers transfer data from ViewModels into entity models and call the CRUD functions in the DAL repositories.) 

WebApi в MVC4 выглядит настолько привлекательно, так как мы сможем назвать операции CRUD из других приложений. Мы все любим эту идею.

Но существующие примеры, которые я нашел, имеют операции CRUD внутри проекта MVC4 под кодом ApiController. Я привык вкладывать эти операции в отдельный проект DAL. Какой рекомендуемый выбор? Можем ли мы по-прежнему иметь отдельный класс DAL? Как вы проектируете архитектуру?

Благодарим вас за полезный совет.

+2

Этот вопрос немного субъективен – MilkyWayJoe

+0

Может быть полезно, если вы предоставите ссылку на пример, на котором вы смотрите. – Bull

ответ

7

Что я делаю это:

  • Repository для запросов к базе данных
    • Service слой для проверки материала и избежать дублирования кода
      • Web UI
      • Web API

Таким образом, пользовательский интерфейс и API будут иметь одну или несколько служб, которые, в свою очередь, имеют один или несколько объектов репозитория.

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

+0

Является ли ваш веб-API еще одним проектом MVC4? – Blaise

+2

Да, обычно я создаю отдельные проекты для всего. Так что мое решение может выглядеть следующим образом: - контекст (держит EDMX) - Хранилища - Услуги (сервис слоя) - Субъекты - ViewModels - WebUI - WebAPI - внедрение зависимости (поскольку ядро ​​DI должно быть вызванным как из проектов API, так и из UI) –

+0

Wow! Вы действительно отделили все! Где выполняются операции CRUD? Они все еще находятся в Хранилищах? – Blaise

Смежные вопросы