A veces me encuentro con estas API de tipo hub de mensajes, por ejemplo, Cocoa NSNotificationCenter: enlace
Por lo general, estas API proporcionan un punto de acceso global en el que se suscribe o transmite mensajes / eventos. Creo que esto es un problema porque fomenta una arquitectura de programa plana y no estructurada, donde las dependencias no están explícitas en la API, sino que están ocultas en el código fuente. No está obligado a pensar en la propiedad y jerarquías de los objetos, sino que puede hacer que cualquier objeto en su programa resulte en cualquier código que se llame. Pero tal vez esto es algo bueno?
¿Este patrón generalmente alienta el diseño de programas buenos o malos, y por qué? ¿Hace que el código sea más difícil o más fácil de probar?
Perdóneme si esta pregunta es demasiado vaga o amplia. Estoy tratando de comprender las posibles consecuencias de un 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 se puede ilustrar 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