0

私はかなり大規模で複雑なアプリケーションを作成しているので、コードの品質を維持するためにデザイン パターンにこだわりたいと思っています。他のほぼすべてのインスタンスで使用できるようにする必要がある 1 つのインスタンスに問題があります。

BusMonitor (ログ メッセージのクラス) のインスタンスと、このインスタンスをログ アクションに使用する他のインスタンスがあるとします。たとえば、ネットワーク プロトコルからの着信フレームを解析し、フレームに応じて異なるメッセージをログに記録する Reactor があります。

BusMonitor、Reactor、その他いくつかのインスタンスを作成する 1 つのメイン インスタンスがあります。Reactor で BusMonitor インスタンスを使用できるようにしたいのですが、設計パターンに従ってそれを行うにはどうすればよいですか?

Reactor の変数として設定するのは、私には醜いようです。 self._reactor.set_busmonitor(self._busmonitor)

BusMonitor へのアクセスが必要なすべてのインスタンスに対してこれを行います。このインスタンスのインポートはさらに悪いようです。

BusMonitor を Singleton として作成することはできますが、Class としてではなく Module として作成し、このモジュールをインポートすることを意味しますが、一貫性を維持するためにクラス内に保持したいと考えています。

どのようなアプローチが最適でしょうか?

4

3 に答える 3

3

一貫性を保つためにクラス内に保持したい

なんで?一貫性が重要なのはなぜですか?

意味のあるクラスを使用してください。使用されていないモジュールを使用します。Python のクラスは、実際にはデータをカプセル化し、状態を保持するためのものです。これらのことを行っていない場合は、クラスを使用しないでください。そうでなければ、あなたは言語と戦っています。

于 2012-07-06T12:39:56.763 に答える
1

すでに階層があるので、チェーンを使用してそれを取得できます。これは、Chain-of-responsibilityパターンではありませんが、考え方は似ています。

各ウィジェットには、ルートウィジェットを除くすべてのウィジェットに対するgetbusmonitor呼び出しがあります。return self.parent().getbusmonitor()結果をキャッシュすることもできます。

于 2012-07-06T13:17:36.743 に答える
0

良い方法を見つけました。クラス BusMonitor でモジュールを作成し、同じモジュール内で、クラス定義後にこのクラスのインスタンスを作成します。プロジェクトのどこからでもインポートできるようになり、クラスとカプセル化を使用して一貫性を維持しています。

于 2012-07-13T12:58:44.137 に答える