Иногда я сталкиваюсь с этими API-интерфейсами в стиле концентраторов сообщений, например, с Центром Какао NSNotificationCenter: 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