Как я могу воспользоваться преимуществами IObservable / IObserver, чтобы избавиться от моего "объекта бога”?

StackOverflow https://stackoverflow.com/questions/2275167

Вопрос

В системе, над которой я сейчас работаю, у меня есть много компонентов, которые определены как интерфейсы и базовые классы.Каждая часть системы имеет несколько определенных точек, где они взаимодействуют с другими частями системы.

Например, компонент подготовки данных подготавливает некоторые данные, которые в конечном итоге должны быть переданы в часть обработки данных, компоненту связи необходимо запрашивать у различных компонентов их статус для ретрансляции вовне и т.д.

В настоящее время я склеиваю эти части системы вместе, используя "объект бога", или объект, обладающий глубокими знаниями о различных частях системы.Он регистрируется с помощью событий здесь и передает результаты методам там, создает метод обратного вызова здесь и возвращает результат этого метода там, и передает множество запросов через многопоточную очередь для обработки, потому что он "знает", что определенные действия должны выполняться в потоках STA и т.д.

Хотя это удобно, меня беспокоит, что этот тип так много знает о том, как устроены все остальные в системе.Я бы предпочел более универсальный концентратор, которому могут быть предоставлены экземпляры, которые могут предоставлять события, методы или обратные вызовы или которые могут использовать их.

Я видел больше о функциях IObservable / IObserver в reactive framework, которые внедряются в .NET 4.0 (я полагаю).

Могу ли я использовать этот шаблон, чтобы помочь заменить мой "объект бога"?Как мне следует это сделать?Существуют ли какие-либо ресурсы для использования этого шаблона для этой конкретной цели?

Это было полезно?

Решение

Казалось бы, вы можете заменить свой объект бога с помощью чего MSDN описывается здесь:

Для создания сложных приложений обработки событий (CEP), использующих На платформе StreamInsight вы создаете структуры, определяющие события, объекты, которые производят и потребляют события, и шаблоны запросов, которые содержат бизнес-логику, необходимую для обработки событий.

Наша команда не собирается переходить на .Net 4.0 в ближайшее время (к сожалению).Таким образом, мы обошли объект бога сценарий путем создания пользовательского фреймворка, аналогичного тому, что предоставляет MAF / MEF.Таким образом, была создана распределенная база знаний с использованием того, что Microsoft называет адаптер.Каждый адаптер отвечает только за свой собственный модуль, передачу данных, событий и т.д.Существует общая оператор который получает данные и события, обрабатывает и передает обратно соответствующему адаптеру.

Мое понимание IObservable & IObserver позволяет мне поверить, что объект бога в этом не будет необходимости - фактически создается распределенная база знаний о том, что происходит в различных частях.Очевидным преимуществом этих интерфейсов также, по-видимому, является то, что промежуточный коммуникатор (т.е.адаптер) больше не требуется.Таким образом, распределение знаний действительно находится в производном классе IObservable.Эта модель по своей сути выводит говорящий / отвечающий отношения - без класса посредничества / арбитража.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top