2

Pocoフレームワークをじっと見ていました。すでに Poco フレームワークを使用しており、その一部を抽象化してさらに簡単にする別の基礎となるフレームワークがあります。

簡単なシナリオで問題を説明したいと思い
ます。プログラムに長方形のオブジェクトがあるとします。シェイプには内部にプライベートhit Testingメソッドがあり、ヒット テストで一定時間 true になった場合、別のクラス、つまり自分のFountainクラスで関数を起動する必要がありました。

Fountationクラス内の関数に形状の特定のオブジェクト情報を渡す必要はありません。私のフレームワークはすでに と のいくつかの機能を提供していNotifyEventますAddListener。このアプローチをとっていたら、シェイプ クラス内にイベントがあり、Add Listener(シェイプが渡された場合はオブジェクト) によってファウンテンにサブスクライブされ、シェイプ クラス内からイベントが通知されます。

さて、Poco 通知センターでは、シェイプ オブジェクトの参照を Foundation クラスに渡す代わりにNotificationCenter、2 番目のクラスに参照を渡します。クラスにはfountainオブザーバーがあり、オブザーバーは形状から通知を受けpostNotification()
ます。ここで 2 つのアプローチの唯一の違いは、特定のオブジェクト情報を渡さないことです。
私は、可能な限り適切なコーディング プラクティスを学ぼうとしている初心者の開発者であり、ここでのデカップリングについては明確ではありません。ここで 2 つのクラスはどのように分離されていますか? (オブジェクトを渡さず、shapeオブジェクトを使用しているだけなのでnotificationcenter?)

編集:上記の質問に追加します。特定の通知をリッスンする必要がある他の 10 個のクラスがあるとしますNotification Center。これらすべてのクラスにも の参照を渡す必要がありますか? そうすれば、クラスの通知センターにオブザーバーを追加できるのは私だけです。

4

2 に答える 2

1

すべきことは、メッセージの送受信プロセスを Observer - Listener 構造に切り離すことです。これはオブザーバー パターンと呼ばれます。このパターンの詳細については、こちらを参照してください。これにより、複数の参照やイベントを処理したり、通信を別のクラスに追加する必要があるたびにメッセージの送受信の実装について考えたりする必要がなくなります。

デザイン パターンの詳細については、 Design Patternsという本を参照してください。再利用可能なオブジェクト指向ソフトウェアの要素

于 2013-01-19T13:15:36.913 に答える
1

基本的にはい。Fountainクラスが のみを認識している場合はNotificationCenter、形状 (Rectangleまたはその他) に結合されていません。これは、形状によって投稿された通知も、それを起動するオブジェクトに依存していないことを前提としています。

編集:編集への返信は「はい」です。addObserver通知が必要な各オブジェクトでメソッドを呼び出す必要があります

于 2013-01-19T13:06:36.237 に答える