Под модульными приложениями я имею в виду приложения, в которых базовая функциональность и модель данных могут быть расширены без изменения кода основного приложения.
Это популярный подход, например. CRM с открытым исходным кодом, например SugarCRM или VTiger.
Этому подходу можно следовать в приложении asp.net mvc с использованием областей или (переносимых областей из MVC contrib), которые позволяют добавлять новые контроллеры и представления в отдельные сборки, не влияя на основные dll.
Проблема возникает, когда кто-то хочет расширить модель данных базового приложения. Это невозможно в любом практическом смысле со структурой сущностей, где определение модели централизовано в файле Edmx. Такой подход не позволяет добавить новую таблицу, которая будет ссылаться на некоторую таблицу базового модуля в новой сборке.
Я заметил, что Orchard CMS обеспечивает полную модульность за счет использования nHibernate (что говорит о том, что у них есть поддержка Microsoft и проект задумывался как демонстрация технологий). Nhibernate допускает такую модульность благодаря подходу POCO. Каждый объект / таблица определяется в отдельном файле, что, очевидно, является способом использования модульных приложений.
Однако есть надежда на подход Entity Framework Code Only, который генерирует модель Edmx во время выполнения с использованием определений POCO. Кто-нибудь пробовал использовать этот подход для распределения определений модели данных в отдельных подключаемых проектах?