Как правильно разбить ASP.NET MVC приложение на несколько проектов(модулей)?
Есть веб-портал, который состоит из множества почти независимых разделов (единственное, что их связывает - БД пользователей): блоги, вопросы, форумы, новости и т.п.
Естественно, все это в едином проекте достаточно неудобно сопровождать.
Хочется разбить проект по разделам. Как лучше всего это организовать? Все, что нашел в сети - костыли на костылях.
На данный момент (MVC 5), контроллеры похватываются из .dll, а также из папки App_Code.
Но возникает проблема коллизий роутинга, совпадение имен вьюх....
Думал делать так:
1. Определить правила именования для модулей и папку хранения *~/Modules/")
2. Свои вьюхи каждый модуль хранит именно в это папке и из кода явным образом к ним обращается (return View("~/Modules/ModuleName/..."))
3. Контроллерам давать длинные названия, содержащие имя модуля, а на самом сайте просто наследовать от них, тем самым получая роут, а также возможность иметь несколько экземпляров модуля.
Пробовал еще несколько вариантов, но мне все не нравится. Неужели нет нормального способа создать модульное приложение, в котором модули не будут связаны напрямую?
UPD (20.10.2015):
в п.3 Контроллеры можно просто абстрактными сделать.
вьюхи и все отальные файлы можно добавить в ресурсы (причем в идеале их нужно распаковать, а также дать возможность что-то переопределять в использующем приложении).
А вы не думали использовать регионы(Areas)? Это даст еще один уровень роутинга, что может решить проблему коллизий, а создавая роут - указать сборки, которые хранят контроллеры
Регионы (Area) предназначены для разделения в пределах одного приложения. Если же мы имеем разные приложения, то:
1. Нет никакой гарантии, что два модуля не будут в одном регионе.
2. Мое основное приложение должно знать как точно называется регион для какого-либо модуля
3. Нет возможности повторного использования модулей (например, я беру модуль Статьи и запускаю в 2х экземплярах: Новости и Блог).
Тоже поддерживаю вариант использования Areas - тем более они предназначены именно для описываемой цели. Пошаговое руководство. Организация приложения ASP.NET MVC с помощью областей https://msdn.microsoft.com/ru-ru/library/ee671793(...
У вас не разные приложения, а разные области. На счет того как зашарить общие представления между областями - отдельная решаемая задача. Правда не так это часто нужно. И в тех двух-трех случаях когда вьюхи вроде бы одинаковые должны быть на первый взгляд, обычно позже все равно выясняется что все-таки нет - и они должны отличаться. Допускаю, что в конечном итоге будет правильней создать и поддерживать их отдельно и независимо дург от друга. Разметки повторяющейся не так много, а стили и скрипты общие использовать, думаю, труда не составит.