Как настроить архитектуру для проекта MVC - PullRequest
6 голосов
/ 18 июня 2011

Я пытаюсь заполучить MVC. Я из ASP.Net фона.

После создания нового приложения MVC 3, я получил контроллер, модели и представления в том же проекте веб-приложения. В ASP.Net мы обычно создаем отдельные проекты для моделей и контроллеров (которые, как я полагаю, совпадают с бизнес-уровнем). Также я создал отдельный проект для DAL, где я буду использовать EF.

Я запутался, так как это идеальная структура решения? Разве мы не должны создавать отдельные проекты для каждого слоя? Поскольку я создал DAL как отдельный проект, мне пришлось добавить в него ссылку на WebApp, потому что я хотел вернуть Model из DAL, и из-за этого теперь я не могу добавить ссылку на DAL в мое WebApp.

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

Ответы [ 2 ]

6 голосов
/ 18 июня 2011

MVC действительно оставляет часть "M" разработчику.

Даже в их официальных примерах вы увидите вариации. Ваш вопрос раскрывает одно из самых распространенных заблуждений о MVC. Вы НЕ должны связывать свой домен или модели данных напрямую с представлениями, а методы контроллера не должны принимать их в качестве параметров. См. в этом посте больше или меньше сообщений .

В идеале, ваши контроллеры будут вызывать DAL, и какой-то механизм отобразит эти модели данных или предметной области в модели View. Именно те модели View - модели, которые существуют специально для облегчения пользовательского интерфейса - должны существовать в папке «Модели» WebApp.

Итак, вы определенно были на правильном пути, создавая новую сборку, которая будет содержать ваш DAL. Один из самых «простых» механизмов для отображения в ViewModel - это простой метод для каждой ViewModel:

public class MyWidgetFormModel()
{
   public string Name { get; set; }
   public string Price { get; set; }

   public MapFromDAL(DAL.Widget widget)
   {
      this.Name = widget.Name;
      this.Price = widget.Price;
   }
}

Обновление : исходя из ваших комментариев, вот отличный ответ о макете проекта одного пользователя.

3 голосов
/ 18 июня 2011

Когда я начинал с MVC, я следовал за луковой архитектурой Джеффри Палермо. Вы можете прочитать об этом:

здесь: http://jeffreypalermo.com/blog/the-onion-architecture-part-1/

здесь: http://jeffreypalermo.com/blog/the-onion-architecture-part-2/

и здесь: http://jeffreypalermo.com/blog/the-onion-architecture-part-3/

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

Вы также можете загрузить рабочий образец из http://codecampserver.codeplex.com/, используя архитектуру лука.

Это не единственная архитектура, которую вы можете использовать с MVC, но это очень хорошее место для начала и изучения IoC и развязки в приложениях MVC.

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