Czasami spotykam te interfejsy API w stylu koncentratora komunikatów, na przykład Cocoa NSNotificationCenter: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html
Zwykle te interfejsy API zapewniają globalny punkt dostępu, w którym subskrybujesz lub emitujesz wiadomości / zdarzenia. Myślę, że jest to problem, ponieważ zachęca do płaskiej i nieustrukturyzowanej architektury programu, w której zależności nie są jawne w interfejsie API, ale ukryte w kodzie źródłowym. Nie musisz myśleć o własności obiektu i hierarchiach, ale możesz sprawić, że dowolny obiekt w programie spowoduje wywołanie dowolnego kodu w dowolnym miejscu. Ale może to dobra rzecz?
Czy ten wzorzec ogólnie zachęca do dobrego lub złego zaprojektowania programu i dlaczego? Czy to utrudnia lub ułatwia testowanie kodu?
Wybacz mi, jeśli to pytanie jest zbyt niejasne lub ogólne. Staram się omijać potencjalne konsekwencje częstego używania takiego interfejsu API i różne sposoby jego wykorzystania.
Edycja: Myślę, że moim największym problemem z tym wzorcem jest to, że API „kłamie” na temat zależności i sprzężeń obiektowych i można to zilustrować za pomocą tego przykładu:
myObj = new Foo();
myOtherObj = new Bar();
print myOtherObj.someValue; // prints 0
myObj.doSomething();
print myOtherObj.someValue; // prints 1, unexpectedly, because I never indicated that these objects had anything to do with each other