A veces me encuentro con estas API de centro de mensajes, por ejemplo, Cocoa NSNotificationCenter: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html
Por lo general, estas API proporcionan un punto de acceso global en el que se suscribe o transmite mensajes / eventos. Estoy pensando que esto es un problema porque fomenta una arquitectura de programa plana y no estructurada, donde las dependencias no son explícitas en la API, sino que están ocultas en el código fuente. No está obligado a pensar en la propiedad y las jerarquías de los objetos, sino que puede hacer que cualquier objeto en su programa provoque que se llame a cualquier código en cualquier lugar. Pero tal vez esto es algo bueno?
¿Este patrón generalmente fomenta el diseño de un programa bueno o malo, y por qué? ¿Hace que el código sea más difícil o más fácil de probar?
Perdóname si esta pregunta es demasiado vaga o amplia. Estoy tratando de entender las posibles consecuencias del uso extensivo de una API como esta, y las diferentes formas en que podría usarla.
Editar: Supongo que mi mayor problema con este patrón es que la API "miente" sobre las dependencias y los acoplamientos de objetos, y puede ilustrarse con este ejemplo:
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