Разработка мультимодульного, межкомандного веб-приложения
Фон
Мы занимаемся редизайном внутреннего веб-приложения (ASP.NET MVC3) с целью облегчения разработки и особенно развертывания. Приложение представляет собой бэк-офис, для которого несколько команд разрабатывают модули. Последние несколько лет это было сделано, работая в том же проекте, а затем создавая полную версию "всего", когда кому-то нужно было выпустить. Неудивительно, что это не сработало так хорошо. Сейчас мы находимся в ситуации, когда полдюжины команд хотят выпускать модули по разным графикам, что делает ситуацию невыносимой.
Чего мы хотели бы достичь:
- Каждая команда разрабатывает свои собственные отдельные модули, которые затем загружаются в фреймворк.
- Такие модули должны быть развертываемыми без повторного развертывания базового приложения или любых других модулей.
- Модули должны иметь возможность предоставлять частичные представления другим модулям
Эта проблема
Мы сделали проверку концепции, отвечающей всем трем требованиям. Межмодульная связь осуществляется с использованием DI-контейнеров. Это работает довольно хорошо - с одной оговоркой. Когда модули имеют разные версии некоторой зависимости, мы получаем несоответствие версий. Если мы хотим избежать возврата к тому, что имеем, и заставлять всех переустанавливать каждый раз, когда кто-то обновляет какую-либо зависимость, нам нужно иметь возможность загружать несколько версий зависимостей.
Насколько я понимаю, это потребует от нас загрузки модулей в отдельные домены приложений. Это, кажется, поднимает ряд вопросов. Во-первых, в ряде дискуссий кажется, что это плохо работает с IIS/ASP.NET в отношении переменных ThreadStatic и т. Д. Во-вторых, нам нужно выполнить сортировку между доменами, что кажется нетривиальным и добавит много сложность. В-третьих, межмодульное общение также выглядит болезненным.
Я кратко посмотрел на MAF, который, по крайней мере, кажется, что дает некоторую поддержку фреймворка для этого типа архитектуры, но он также выглядит решительно сложным... Есть ли лучшие альтернативы: какая-то поддерживающая фреймворк или дизайн?