前提:私のプロジェクトでは、それぞれ Request と Response を定義する 2 つの一般的に型指定されたインターフェイスがあります。リクエストはレスポンスを生成するために処理されるため、すべてのレスポンスはリクエストに基づいて作成されます。Processor インターフェースは、要求を処理して、対応する応答を作成します。
コード:リクエストとレスポンスのインターフェースは次のとおりです。
interface Request<T1>
と
interface Response<T2>
T2
ここで、とはそれぞれ、T1
一般的なリクエストとレスポンスのタイプを表します (わかりやすくするために、意図的に別の名前で呼んでいます)。
ここで、T2は要求であり、T1は応答であるため、上記のコードは次のように展開されます。
interface Request<T1 extends Response>
と
interface Response<T2 extends Request>
以下に注意してください: リクエストとレスポンスのインターフェースは継承関係を共有しません。
ここで、Request インターフェースを考えてみましょう。Response は再び型指定され、要求から構築された応答は元の要求タイプに関連付けられるため、上記のコードは次のように進化します。
interface Request<T1 extends Response<? extends Request<T1>>>
と
interface Response<T2 extends Request<? extends Response<T2>>
現在、プロセッサ インターフェイスは次のように定義されています。
interface Processor<R1 extends Request<R2>, R2 extends Response<R1>> {
R2 process(R1 request);
}
具体的なクラス:
リクエストの実装:
class ConcreteRequest implements Request<ConcreteResponse> {
ConcreteResponse response;
...`
}
レスポンスの実装:
class ConcreteResponse implements Response<ConcreteRequest> {
ConcreteRequest request;
...
}
プロセッサの実装:
class ConcreteProcessor implements Processor<ConcreteRequest, ConcreteResponse> {
ConcreteResponse process(ConcreteRequest request) {
...
}
}
質問:上記のコードは過度に設計されていますか? 補完的な入出力オブジェクトのタプルを表す簡単な方法はありますか?