때때로 나는 코코아 NSNotificationCenter 예를 들어,이 메시지 허브 스타일의 API를 건너 : http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html
일반적으로 이러한 API는 메시지 / 이벤트를 구독하거나 브로드 캐스트하는 글로벌 액세스 지점을 제공합니다. API에서 명시 성이 없지만 소스 코드에 숨겨져있는 평평하고 구조화되지 않은 프로그램 아키텍처를 장려하기 때문에 이것이 문제라고 생각합니다. 객체 소유권과 계층 구조에 대해 생각할 필요는 없지만 프로그램의 객체를 사용하여 호출되는 코드를 만들 수 있습니다. 그러나 이것은 좋은 것입니까?
이 패턴이 일반적으로 우수하거나 나쁜 프로그램 설계를 장려하는 이유는 무엇입니까? 코드를 테스트하기 어렵게 만들거나 더 쉽게 만들 수 있습니까?
이 질문이 너무 모호하거나 광범위하다면 용서하십시오. 나는 이와 같은 API를 광범위하게 사용했을 때의 잠재적 결과와 그것을 사용할 수있는 다른 방법에 대해 머리를 감싸려고합니다.
편집 :이 패턴의 가장 큰 문제는 API가 종속성 및 객체 커플 링에 대한 "거짓"이며 다음 예제로 설명 할 수 있다는 것입니다.
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