まず、これが必ずしも良い考えだとは思いません。これが本当に可能かどうかを確認しているだけです。クライアントに送信するオブジェクトに明示的に変換する必要がないことや、インターフェイスを使用してセキュリティ上の懸念のある特定のフィールドをブラックリストに登録することなど、いくつかの利点が見られました。私はそのアイデアに固執していませんが、試してみたいと思います。
Spring MVC + Jackson を使用して、JSON をオブジェクトから直接生成しています。クライアントに送信するために必要なデータを含むドメイン オブジェクトがあり、必要に応じてすべての発信 JSON 要求に追加されるエラー文字列のリストがあります。
したがって、返される JSON は次のようになります。
{ name: 'woohoo', location : 'wahoo', errors : ['foo'] }
現在、クライアント側で何をすべきかをモデル化するクラスがありますが、エラー メソッドを使用して常に共通の基本クラスを拡張しています。
したがって、次のようになります。
interface NameAndLoc {
String getName();
String getLocation();
}
と
interface ResponseErrors {
List<String> getErrors();
void appendError(String);
}
これらのインターフェイスを実装する 2 つのクラスがあり、CGLIB に実装する新しいクラスを生成させたいと考えています。
interface NameAndLocResponse extends NameAndLoc, ResponseErrors {}
現在、CGLIB ミックスインを使用して、次のオブジェクトを生成できます。
Object mish = Mixin.create(
new Class [] {NameAndLoc.class, ResponseErrors.class},
new Object [] { new NameAndLocImpl(), new ResponseErrorsImpl() } );
その後、オブジェクトを NameAndLoc または ResponseErrors のいずれかにキャストできますが、共通のエラー処理クラスを拡張してから NameAndLoc を実装することなく、同じバッキング クラスを使用するが NameAndLocResponse インターフェイスを実装するオブジェクトを作成したいと考えています。 .
私が持っているものでキャストしようとすると、エラーになります。これは可能だと確信しています。
これと非常に似ていると思いますが、完全ではありません: http://www.jroller.com/melix/entry/alternative_to_delegate_pattern_with