0

私は、Java でかなり大きなキューイング手順をシミュレートする学術プロジェクトに取り組んでいます。シミュレーターのコアは、8 つのクラスが存在する 1 つのパッケージ内にあり、それぞれが 1 つのコンセプトを実装しています。プロジェクト内のすべてのクラスは SRP に従います。これらのクラスは、シミュレーターの動作をカプセル化し、プロジェクト内の他のすべてのクラスを相互接続します。

発生した問題は、これらの 8 つのクラスのほとんどが、私が論理的に考えているように、密接に結合されており、必要に応じてメソッドを呼び出すことができるようにするために、このパッケージ内の他のすべてのクラスの実用的な知識が必要であるということです。アプリケーションは各クラスのインスタンスを 1 つしか必要としないため、パッケージ内の他のすべてのクラスの参照を各クラスで保持するのではなく、新しいクラスの各クラスに静的フィールドを作成し、それを使用して呼び出しを行う方がよい場合があります (それは間違っていると確信しています)-しかし、これは正しい設計ソリューションと見なされますか? または、私のニーズにより適したデザインパターンがありますか?

4

3 に答える 3

1

一種の複雑なステート マシンがあるようですね。オブジェクト間のメソッド呼び出しを非同期イベントとして抽象化できます。他のオブジェクトのメソッドを直接呼び出す代わりに、各オブジェクトは一般的なイベントを「ルーター」オブジェクトに送信できます。ルーター オブジェクトは、ルーターにリスナーを登録した任意の数のオブジェクトにイベントを転送します。リスナーまたはルーター アルゴリズムにフィルタを実装して、イベントの受信者を制限できます。状態の変化もイベントとして公開されます。
JMS サーバーを「ルーター」として使用すると、オブジェクトを複数のホストに分散することもできます。
このアプローチは、共通のイベント スキーマ/インターフェイスの形式で、オブジェクト間に単純で再利用可能なインターフェイスを提供します。

于 2010-03-19T15:57:00.967 に答える
0

インターフェイスを使用してクラスを分離することを考えたことはありますか? 8 つのクラスがありますが、通信/相互運用性を有効にし、かなりの柔軟性を得るために、いくつかのインターフェイスのみが必要になる可能性があります。

于 2010-03-19T12:28:01.607 に答える
0

私が発生した問題は、これらの 8 つのクラスのほとんどが、私が論理的に考えているように、密結合されており、必要に応じてメソッドを呼び出すことができるようにするために、それぞれがこのパッケージ内の他のすべてのクラスの実用的な知識を持っている必要があることです。 .

それは大丈夫です。Java コンポーネントの (個々のクラスの外側の) 実装の最小単位はパッケージです。パッケージ内のクラスは密結合できます。カップリングが外部に漏れないようにするだけです (たとえば、パッケージで保護されたクラスを使用します)。

アプリケーションは各クラスのインスタンスを 1 つしか必要としないため、パッケージ内の他のすべてのクラスの参照を各クラスで保持するのではなく、新しいクラスの各クラスに静的フィールドを作成し、それを使用して呼び出しを行う方がよい場合があります (確かにそれは間違っている)

これら 8 つのクラスのすべてが他の 7 つのクラスすべてのインスタンスを持つ必要がある場合、クラス間で機能を分割する方法が適切でない可能性があります。すべてのクラスが責任を負う領域が 1 つしかない場合、なぜこのような相互依存関係が発生するのでしょうか?

これらのクラスは状態を持っていますか? それとも、静的である可能性のあるメソッドのコレクションですか?

繰り返しになりますが、このパッケージのパブリック インターフェイスが問題ないように見える限り、あまり心配する必要はありません。クライアント コードも 8 つのクラスについて知る必要がありますか?

于 2010-03-19T12:23:59.887 に答える