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