2014-11-05 4 views
0

Я создаю прототип для многоуровневого решения ASP.NET, которое будет обрабатывать (поэтапно) одинаковые типы сообщений для всех арендаторов. Однако для некоторых арендаторов некоторые шаги нужно обрабатывать несколько иначе.Архитектура динамического конвейера в .Net

Итак, давайте предположим, что для одного типа сообщений есть десять шагов, и у нас есть 100 арендаторов. В среднем у арендатора есть два пользовательских шага. Это дает десять стандартных этапов и 20 пользовательских.

То, что я пытаюсь достичь, заключается в том, чтобы иметь возможность обновлять решение с обновленной реализацией (новой DLL) этапа без необходимости перезапуска целого решения. Итак, вопрос в том, какова лучшая архитектура для этого?

Я думал о том, что каждый шаг реализации выполняется в отдельном AppDomain, но по мере увеличения количества типов сообщений, арендаторов и шагов мы получили бы много AppDomains, которые, как я полагаю, потребуют большой памяти и вероятно, не дают оптимальной производительности.

Это лучший/единственный подход, или есть другой подход, который я должен изучить?

ответ

0

Если вы используете MVC (или, возможно, даже веб-формы), вы можете написать свои «шаги» в встроенном коде Razor. Затем просто загрузите новый файл, когда один из них нуждается в обновлении. IIS автоматически подберет изменение без необходимости делать что-либо.

+0

Я подумаю об этом, но большинство шагов, как правило, не то, что вы делаете в коде Razor - они могут включать запросы к базе данных или сложную логику. Поэтому, даже если это возможно, это не оптимальное решение в моем сознании. –

+0

Razor запускается на веб-сервере с полным доступом к базе данных или любому другому ресурсу, который может потребоваться на стороне сервера, и выполняется в том же конвейере, что и код контроллера. MVC (разделение View и Controller) - это просто соглашение. Было бы не в порядке, если бы вы изменили соглашение для этой области вашего приложения. Мир не развалится. :) В этом случае вы могли бы подумать о MVC как о плагиновой архитектуре (например, MEF) - именно это вам и нужно. –

+0

Я согласен, что это способ пойти - это просто не совсем сидит прямо со мной;) Я посмотрю на этот подход. Возможно, это лучше, чем я думаю :) –