Разделение модели, представлений и контроллеров в разных проектах - PullRequest
2 голосов
/ 04 августа 2011

Я хочу иметь отдельные проекты для моделей, контроллеров и представлений.Каждый пойдет в разные проекты.модель может идти в библиотеку классов и добавляться как dll.

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

а если представления находятся в отдельном проекте, как контроллер и представление будут взаимодействовать друг с другом?

Ответы [ 2 ]

3 голосов
/ 04 августа 2011

ASP.NET MVC работает по принципу соглашения над конфигурацией. Если вы выберете структуру проекта, как вы описали, то вы решили не следовать обычным КОНВЕНЦИЯМ.

Таким образом, большинство преимуществ, которые дает вам MVC (например, связывание представления и действий контроллера, привязка модели, маршрутизация URL), выбрасываются за пределы окна.

Однако ничто не мешает существованию моделей в отдельной библиотеке классов, поскольку ASP.NET MVC не накладывает никаких соглашений на природу классов вашей модели - любой C # POCO может быть вашим классом модели, включая типы вашей библиотеки.

Это не невозможно сделать так, как вы изобразили, но тогда вам придется настроить множество параметров (там, где раньше было достаточно конвенций). Кроме того, когда MVC3 обновляется до MVCX (где x> 3), неизвестно, будет ли ваша пользовательская установка продолжать работать, что делает обновления более дорогими.

Однако вы могли бы сделать это: оставляя контроллеры простыми и небольшими, вы можете извлекать большинство ваших служб и репозиториев, моделей и ClassMappings и интегрировать их с DI, ORM и т. Д. В отдельные или комбинированные DLL. Таким образом, общая структура проекта приведена в соответствие с соглашениями MVC, в то время как ваша бизнес-логика отсутствует в других проектах.

2 голосов
/ 15 сентября 2013

Каждый раз, когда мы создаем новый проект ASP.NET MVC 3/4/5, он следует предопределенному соглашению о каталогах и добавляет несколько файлов и каталогов в проект.Однако не обязательно следовать этой структуре каталогов по умолчанию, но это помогает нам поддерживать приложение в чистоте и удобстве обслуживания путем группировки компонента приложения на основе функциональных возможностей, таких как контроллер, модель, представление и т. Д. Но когда речь идет о большом проекте, желательно разделитьразные компоненты в разных проектах библиотеки.то есть все классы моделей идут в отдельный библиотечный проект, все контроллеры идут в другой библиотечный проект и так далее.

Чтобы разделить модель и представление контроллера, выполните следующие действия:

Прежде всего возьмите пустое веб-приложение MVC 3/4/5 с именем SeparatingControllerModelsView ,Затем добавьте контроллер и назовите его HomeController .Теперь добавьте класс модели и назовите его TestModel . Добавить представление , щелкнув правой кнопкой мыши метод Index и выбрать TestModel, чтобы создать представление строго типа.

Теперь для , разделяющих модули и контроллеры addдва библиотечных проекта и названных им ModelLibrary & ControllerLibrary .Удалите класс по умолчанию из обоих проектов библиотеки.Щелкните правой кнопкой мыши проект ModelLibrary и выберите Свойства.Свойства проекта откроются и изменят пространство имен по умолчанию с пространством имен (SeparatingControllerModelsView.Models) при создании класса модели TestModel. Теперь щелкните правой кнопкой мыши по проекту ModelLibrary и выберите добавить существующий элемент и добавьте класс TestModel из веб-приложения SeparatingControllerModelsView .

Таким же образом также измените пространство имен библиотеки контроллера с пространством имен из HomeController класса.Теперь добавьте ссылку System.Web, System.Web.Mvc .Добавьте класс HomeController из SeparatingControllerModelsView веб-приложения, щелкнув правой кнопкой мыши элемент ControllerLibrary и затем добавьте существующий элемент.

Теперь Удалите каталог Controllers and Models из SeparatingControllerModelsView .Добавьте ссылку на два проекта библиотеки и запустите проект, он работает как проект MVC по умолчанию.

Если в проект добавлена ​​какая-либо область, необходимо добавить другой проект библиотеки в соответствии с областью.Измените пространство имен библиотеки по умолчанию (и контроллер, и модель), соответственно пространство имен контроллера и моделей области.

Поскольку пространства имен совпадают с отдельной библиотекой, поэтому во время выполнения с использованием пространства имен они взаимодействуют сдруг друга легко.

также можно использовать следующую ссылку

Создание приложения ASP.NET MVC Areas областей с использованием нескольких проектов

Окончательный проект будет выглядеть так ...

enter image description here

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