Как я могу воспользоваться IObservable / IObserver, чтобы избавиться от моего "объекта бога"? - PullRequest
4 голосов
/ 16 февраля 2010

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

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

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

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

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

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

1 Ответ

1 голос
/ 16 февраля 2010

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

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

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

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

...