У меня есть набор служб (не WCF), которые сидят в очередях. Когда приходит сообщение, типичная услуга выполняет некоторые вычисления и выплескивает в выходную очередь ноль или более сообщений результатов. Помимо своей основной функции, каждая служба имеет некоторую логику ведения хозяйства, такую как аут-аут/аудит/протоколирование/отслеживание состояния с точными шагами и последовательностью, несколько различающимися между службами. Вот где понятие конвейера входит в картину.Схема трубопровода для обработки сообщений
Я не доволен дизайном, в котором мы оказались, и ищем способы упростить его. Должен ли я моделировать порты CCR? Конвейер ASP.NET? АОП? Что-нибудь еще?
Мой текущий проект выглядит следующим образом: у меня есть интерфейс IMessageHandler<TMessage>
и около 15 реализаций, которые объединены в 6 уникальных способов с помощью IoC. Интерфейс определяет один метод: Handle (TMessage msg), поэтому каждая реализация может выполнять некоторую логику как до, так и после передачи сообщения следующему обработчику в цепочке.
Проблема с этим заключается в том, что трудно запомнить, что именно делает каждая реализация и почему они были привязаны таким образом к этой конкретной услуге. С другой стороны, наличие каждого аспекта в своем классе позволяет лучше разделить проблемы и, следовательно, упростить модульное тестирование.
Идеи? Любые хорошие схемы трубопроводов, на которые я могу смотреть? Любые хорошие реализации конвейера, которые я могу использовать в качестве ссылки? Или я должен JFHCI?
Соответствуют ли классы функциональным группам или имеют некоторые зависимости наследования? Это проблема визуализации больше, чем проблема внедрения? Возможно, вы можете использовать WF в качестве контейнера конвейера? – yieldvs
@yieldvs: Нет. Может быть. У меня есть причины ненавидеть WF, но в любом случае спасибо. – zvolkov