私はこの問題に直面している唯一の人ではないと確信していますが、今まで解決策を見つけることができません。問題は次のとおりです。検証用に使用するデザインパターン
レガシーシステムからすべてのクライアントがそれを使用しているWebサービス(私は何も制御できず、変更できません)を公開しました。私はWebサービスからのリクエストを受け取り、オブジェクトは非常に複雑ですが、例のために、Object B、Object Cなどのいくつかの他のオブジェクトを含むWebサービス呼び出しからオブジェクトAを受け取り、さらにオブジェクトB & Cには、いくつかのプリミティブデータ型およびその他のオブジェクトも含まれています。私の問題は、オブジェクトA(すべてのオブジェクトとサブオブジェクトを含む)全体を検証したいのですが、ここではデザインパターンをお勧めします。第二に、ここでの主なポイントは、Webサービスからさまざまな種類のオブジェクトAを取得できることです。私が実際にオブジェクトAの異なるタイプによって意味することは、オブジェクトAがクライアントに依存するということです。つまり、一部のクライアントは、オブジェクトBを含むオブジェクトにデータを埋め込まずにオブジェクトAを送信します。クライアントに基づいてオブジェクトAを検証する必要があります(一部のクライアントにはオブジェクトBが含まれている必要があり、オブジェクトBにはいくつかの要素が必要です)。言い換えれば、私はクライアントABCがオブジェクトBのフィールドabcを文字列型にし、最大長を25文字にしたいということを教えてくれるような、そのフィールドにデータを格納することは必須です。
私が実行したいと思いますいくつかの検証は、データ型のためのいくつかのオブジェクト(オブジェクトBを言う)、特定のフィールドの長さのフィールドを確認する
で、このクライアントのために必要なフィールドであるか、それがオプションであるなどなど...
具体的な実例は非常に便利です。
この特定の例のオブジェクトAの構造は次のとおりです。
public class A
{
private B objectB;
private C objectC;
// and so on
}
public class B{
private E objectE;
private String name;
private int age;
// and so on
}
public class C
{
private F objectF;
private String address;
private String country;
}
public class E
{
// Members here
}
public class F
{
// Members here
}
P.S:一般的な理解のためにクラスとメンバーに任意の名前を付けました。 Oはい私はここでJavaを使用していると言及するのを忘れていましたが、デザインの原則やパターンをどの言語にも適用できるので、実際には問題になりません。あなたからすぐに聞くことを望んでいます。:)
検証はさまざまな方法で行うことができ、非常に意見に基づいています。 [戦略パターン](http://en.wikipedia.org/wiki/Strategy_pattern)を見てください。 – Bart
ストラテジーパターン以外の方法をお勧めしますか? –
VisitorとFactory/AbstractFactoryの組み合わせを使用することをお勧めします。ファクトリは、特別なルールを持つクライアントタイプ別に任意のバリデータクラスを作成できます。ビジターカーは、バリデータークラスを使用して構造体全体を検証します。 –