Kadang saya menemukan API gaya hub-pesan ini, misalnya Cocoa NSNotificationCenter: http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSNotificationCenter_Class/Reference/Reference.html
Biasanya API ini menyediakan titik akses global tempat Anda berlangganan atau menyiarkan pesan / acara. Saya pikir ini adalah masalah karena mendorong arsitektur program yang datar dan tidak terstruktur, di mana dependensi tidak eksplisit dalam API, tetapi disembunyikan dalam kode sumber. Anda tidak dipaksa untuk berpikir tentang kepemilikan objek dan hierarki, tetapi lebih suka membuat objek apa pun dalam program Anda menghasilkan kode apa pun di mana pun dipanggil. Tapi mungkin ini hal yang baik?
Apakah pola ini umumnya mendorong desain program yang baik atau buruk, dan mengapa demikian? Apakah ini membuat kode lebih sulit atau lebih mudah untuk diuji?
Maafkan saya jika pertanyaan ini terlalu kabur atau luas. Saya mencoba merangkul kepala saya di sekitar konsekuensi potensial dari penggunaan API yang luas seperti ini, dan berbagai cara Anda dapat menggunakannya.
Sunting: Saya kira masalah terbesar saya dengan pola ini adalah bahwa API "terletak" tentang dependensi dan sambungan objek, dan dapat diilustrasikan dengan contoh ini:
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