有时我遇到这些消息中心式的API,例如Cocoa 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