6

ドメイン内の優先度/設定をモデル化するための最良の方法は何ですか?たとえば、私が人を代表する
クラスを持っていて、ピザ、スパゲッティ、オムレテなどの好みがあり、実際にはピザよりもスパゲッティを好むと​​仮定します。 これらはどのように最適にモデル化されていますか? 最初の考えは、挿入順序に従って優先順位を維持しながら(のメンバー変数として)それらを配置することです。たとえば、リストの最初が最も優先され、次にリストの2番目が2番目に優先されるなどですが、これは退屈すぎてしまう。たとえば、好みなどの検索や関連付けを行いたい場合。 おそらく、このような問題に対する標準的なアプローチはありますか? PersonPersonX

ListPerson

4

4 に答える 4

1

Preference全体としてはそれ自体が完全なエンティティですが、関連付けられていない限り意味はありませんが、Personそれ自体で生きることができます。

優先順位に関する限り、優先順位はありPreferenceません。オムレツ、ピザはすべて同じですが、人に関連付けられている場合は優先順位があります(たとえば、私はオムレツよりもピザが好きで、ピザやオムレツではなく私に依存しています)。

つまり、PreferencePersonオブジェクトがあります。

これで、プリファレンスは人によって異なるため、プリファレンスを人に関連付けます。

優先順位は人に大きく依存するため、達成するための複数のオプションがあります。

  1. PriorityQueueを使用-プリファレンスを追加するときに、優先度を割り当てます。このキューはPersonクラス自体に存在します
  2. カスタムコンパレータを使用する(@assyliasの提案による)
  3. ルールを設定に追加し(場所、性別などに基づく)、事前に設定されたルールがあり、特定の基準が与えられると、システムによって計算された設定が返されますが、これは手動でオーバーライドされます。この場合、を使用できますPriorityQueue
于 2012-05-01T17:01:14.260 に答える
1

あなたが提案したようにリストを使用し、Comparator<Preference>その人の2つの設定を比較できる を返すメソッドを Person クラスに追加できます。

Person somebody.addPreference(pizzaPreference);
Person somebody.addPreference(omelettePreference);
....
Comparator<Preference> c = somebody.getPreferenceComparator();
boolean prefersPizzaOverOmelette = (c.compare(pizzaPreference, omelettePreference) > 0);
boolean hasNoPreferenceBetweenPizzaAndOmelette = (c.compare(pizzaPreference, omelettePreference) == 0);

そして、コンパレータは単にリスト内の設定のインデックスをチェックします(その設定などが含まれている場合)。

于 2012-05-01T15:13:58.523 に答える
1

オブジェクトの優先度を表すために優先度キューを使用し、Comparator説明されているルールを考慮してクラスに適切なキューを定義できます。キューは優先度ヒープを使用して、オブジェクトが挿入されるときに優先度で並べ替えられた状態を維持します。

于 2012-05-01T15:14:51.463 に答える
1

このようなクラス構造を使用します...(ずさんなJavaを許してください...私はC#の男です)

public class PersonPreference
{
     public Preference preference;
     public int rank;
}

次に、ユーザーが自分の好み (したがってランク列) を並べ替え、必要に応じてそのプロパティ/列で注文できるようにします。

編集

これをもう一度見て、クラスを再定義したいと思います。好みは、別の好みと比較して、ユーザーの好みでなければなりません...

public class PersonLike
{
     public string like;
     public int rank;
}

この新しいクラスは、人が好きなものを定義し、ランク付けを可能にするため、このクラス (またはそのデータ表現) のインスタンスが多数ある場合、それらをランク付けできます。本質的には、他のものよりも何かを好むユーザーです。いいね自体は、他のものと比較されていないため、好みではありません。

このアプローチにより、n 個の関心を相互にランク付けして、多数の好みのコレクションを作成できます。

于 2012-05-01T15:20:03.437 に答える