Мы создаем около 10 сайтов ASP.NET MVC с общим набором функций (и соответствующими URL-адресами, маршрутами, контроллерами, действиями и представлениями). Все сайты также будут иметь общий базовый набор объектов домена (например, пользователей, компаний) и базовых атрибутов этих объектов (например, имя, адрес и т. д.).
Но каждый сайт также будет сильно настраиваться и расширяться по сравнению с базовым. Например, наш сайт для крупных публичных компаний будет иметь поля «Дочерняя компания» и «Символ акции» в объекте домена «Компания», а наш сайт для стартапов будет иметь атрибуты «Венчурная фирма» и «Финансирование». Внешний вид также будет значительно различаться, хотя мы пытаемся сохранить HTML как можно более согласованным (по модулю дополнительных полей формы для дополнительных атрибутов объекта домена и т. д.). Мы также будем экономно переопределять изображения, чтобы мы могли, например, повторно использовать одну и ту же графику кнопок на разных сайтах.
В любом случае, мы пытаемся выяснить, как лучше всего спроектировать и спроектировать вещи, чтобы мы могли повторно использовать как можно больше кода и как можно больше тестов, не ограничивая нашу свободу добавлять атрибуты для каждого приложения и варьировать пользовательский интерфейс между приложениями.
Я знаком с тем, как работать с несколькими арендаторами с ограниченной настройкой, как вы найдете в StackOverflow/SuperUser/ServerFault (или MSDN/TechNet, если на то пошло), где пользовательский интерфейс немного отличается, а модель данных более или менее идентичный. Но когда модели и пользовательский интерфейс очень разные (но наследуются от общей базы), я менее уверен, как действовать дальше.
Меня меньше беспокоят операционные проблемы, поскольку мы, вероятно, будем запускать каждый сайт в отдельном домене приложений и размещать их в отдельных базах данных. Меня больше беспокоит снижение долгосрочных затрат на обслуживание кода, повышение гибкости (например, простота добавления новых функций в базу без нарушения производных приложений) и реализация краткосрочной экономии затрат на разработку/тестирование по мере создания нашего второго, 3-й, 4-й и т.д. сайт.
Я ищу как общие рекомендации и предложения, так и конкретные предложения о том, как сделать эти рекомендации реальными, используя современные методы ASP.NET MVC.
Я понимаю, что это очень общий вопрос, но для начала я ищу как руководство высокого уровня, так и конкретные советы и рекомендации о том, как применять это руководство с ASP.NET MVC, включая такие вещи, как:
- рекомендации по разделению базового/производного между проектами Visual Studio
- советы по управлению исходным кодом, чтобы избежать разветвления
- советы по схеме базы данных (FWIW, все наши базы данных небольшие - менее 10 000 строк на таблицу, поэтому стоимость разработки / тестирования является большей проблемой, чем производительность БД)
- советы по повторному использованию контроллеров/представлений/и т. д. соответствующие «базовым» атрибутам модели, особенно повторное использование пользовательского интерфейса для таких вещей, как формы «новых клиентов», которые будут иметь сочетание базовых и производных атрибутов.
У кого-нибудь есть хороший совет, как создать такое многопользовательское приложение?