RequestHandler クラスと RequestListener クラスがあります。RequestHandler は RequestListener を作成し、それ自体への参照を渡します。次に、RequestListener は RequestHandler のメソッドを呼び出して、処理時にさまざまなタイプのリクエストを処理します (例: handleTypeARequest()、handleTypeBRequest() など)。残念ながら、RequestHandler は RequestListener (例: processNextRequest()) のメソッドも呼び出すため、循環依存関係があります。
class RequestHandler {
RequestListener requestListener;
...
}
class RequestListener {
RequestHandler requestHandler;
...
}
これは、2 つの間の結合がより緊密であることを意味し、一般的にはコードの匂いと見なされます。
1 つの解決策は、異なるメソッドではなく、異なるオブジェクトを使用して各リクエストをカプセル化することです。RequestListener は、プロンプトが表示されたときにリクエストを処理し、そのリクエストに対して何らかのタイプの Request オブジェクトを返すことができます。残念ながら、私はこのアプローチがあまり好きではありません。その理由の 1 つは、より多くのオブジェクトとクラスの複雑さが増したためであり、もう 1 つはパフォーマンスの問題 (ここで重要です) のためです。RequestHandler で handleXXXRequest() メソッドを直接呼び出すと、一連のオブジェクトを作成し、必要になるまでそれらをバッファリングするためにスタックを維持するよりもはるかに高速です。
この問題に対する他の解決策はありますか?また、それは本当に問題なのでしょうか?