2017-11-05 12 views
1
/異なるネストされたオブジェクトより 重要な動的比較(オプション/ルール)と とオブジェクトの2つのインスタンスを比較する方法

2つのインスタンスは、(オプション/ルール/引数)動的と比較

基本的に、私が比較する必要があるオブジェクトの属性は何か分かりません。オプション/ルールは様々であり、UIによってユーザーによって動的に追加されます。もちろん、多くのifステートメントで多くのメソッドを簡単に作成できます。これは私が探しているものではありません。この機能が必要な多くのオブジェクトがあります。

私はReflectionを使用すると考えましたが、これは多くのネストされたオブジェクトでどうしますか? objはobjを持ちます。objはobjのリストを持ち、Cはobjを持ちます。それは反射をかなり複雑にするでしょうか?

私もRespoibllityのチェーンを考えましたが、まだ解決策は、私には非常に明確ではない..です

は、私はこのオブジェクトは、いくつかが含まれているオブジェクトAを持っていると言います標準データ型:int、boolなど。また、オブジェクトBには標準データ型もあります。私は今、私が比較する必要がある2つのインスタンスを持っています。しかし、単純にすべての属性を比較するだけではありません(CompareTo)。ユーザーまたはいくつかのルール(いくつかの文字列が好ましい)が比較する必要があるとだけ述べています。どのように進行するのですか?

public class A { 
    int number; 
    boolean bool; 
    C other; 
    List<B> list; 

    public A (..... some args){ ... } 

    void dynamicCompare(A otherObj, String [] rules){ 
     // compare using args 
    } 
} 

public class B { 
    int number; 
    boolean bool; 
    D other; 

    public B (..... some args){ ... } 
} 

答えて

1

私は責任の連鎖がここに役立つとは思わない。
このパターンは、いくつかの処理要求があるのに意味がありますが、どのオブジェクトが実際にそれに対処するのか分からないか、わからない場合があります。
これを実現するには、特定の順序でオブジェクトのチェーンを定義します。それぞれの要求はチェーンの次の要素に置かれます。
私の場合、私は処理中にチェーンや注文を特定しません。

あなたの要件には、2つの方法があります。

1)アプリケーションユーザのためのリアルなダイナミックソリューション:独自のクエリ言語を導入するか、GraphQLなどのクエリ言語ライブラリを使用します。

JSONやその他の形式に依存するリクエスト言語をアプリケーションのユーザーに提供し、バックエンド側からアプリケーションでユーザーのクエリを解析し、オブジェクトの性質を識別するためにリフレクションを使用し、それは同じタイプのインスタンスを持つ。

2)動的ソリューションが少なく、より多くのコードが必要ですが、クエリ言語を必要とせず、コンパイル時にチェックされるとより堅牢です。
ユーザーが要求として渡すことができるオブジェクトの種類ごとに、クエリクラスを導入します。例えば

... 
public void List<ObjectA> match(List<ObjectA> objectsA){ 

     List<ObjectA> matched = new ArrayList<>(); 

     for (List<ObjectA> current : objectsA){ 

     if (fieldOne != null && !fieldOne.equals(current.fieldOne)){ 
       continue;      
     } 
     ... 
     matched.add(current); 
     } 
} 

public class QueryForObjectA{ 

     private String fieldOne; 
     private Integer fieldTwo;   
     private QueryForObjectB queryForObjectB;  
     .. 

} 

AND(外部又は)このクラス内のいくつかのobjectsAとユーザクエリに一致するように処理方法を紹介します

関連する問題