1

Projectクラス、、、がEmployeeあるとしましょうProjectAssignementRole2つの値を持つ列挙型とがLEADERありFOLLOWERます。 sは、タイプがメンバーフィールドを持つオブジェクトを介してEmployeesに割り当てられます。ProjectProjectAssignmentroleRole

各プロジェクトにはリーダーを1人だけ持つことができますが、フォロワーを多く持つことができるというビジネスルールがあります。これを実装するために、 forとforRoleのメンバーフィールドsingularを指定します。(将来、さらにロールを追加する可能性があります。)サーバー側のJavaは、プロジェクトに複数のリーダーを割り当てようとしても、それを許可しないかどうかをチェックします。trueLEADERfalseFOLLOWER

これまでのところ、私は特に珍しいことを説明しているとは思いません。

厄介な点は次のとおりです。プロジェクトに同じ役割を持つ複数の人を割り当てないようにするために、(手書きの)クライアント側のJavaScript検証がいくつかあります。フォロワーにはハードコードされた例外があります。JavaScriptコードにRole列挙型を認識させてメソッドにアクセスできるようにするクリーンな方法はありますisSingularか?

(明らかに、ある種のRole列挙型をJavaScriptに実際に転記する必要があります。手動で、または半自動でさえも、それを避けたいと思います。それは、より多くの状況で行う価値よりも急速に手間がかかるためです。 )。

私はSpringや同様のフレームワークを使用しておらず、単なる.jspsを使用しています。そのようなものを使用するようにアプリケーション全体を書き直すことは良い考えかもしれませんが、問題の範囲をはるかに超えています。

4

2 に答える 2

2

私は通常、ページ上の動的に生成されたJavascriptにルックアップテーブルを追加することで、この種の問題を解決します。たぶん、ユーザーのIDがキーであり、ユーザーの「特異性」が値です。または、人気の低い人だけをリストすることもできます(LEADERの数が少ない可能性があるため、それらだけをリストします)。次に、JavaScriptのLUTを参照してください。

実際にENUMにアクセスすることはできません。代わりに、サーバー側のオブジェクト記述を完全にモデル化してすべてのデータをコピーするJavascriptオブジェクトを基本的に構築することを意味する場合でも、ギャップを自分で埋める必要があります。

于 2012-12-17T18:29:58.167 に答える
1

組み込みのものを探していたのは知っていますが、結局、半自動変換に引きずり込まれました。

この関数は、任意の列挙型をJavaScriptオブジェクトに変換します。

public static <E extends Enum<?>> String getEnumAsJavaScript(Class<E> c)
{
  String name = c.getName().substring(c.getName().lastIndexOf('$')+1);
  String result = "var " + name + " = {";
  for (E o: c.getEnumConstants()) {
    if (o.ordinal() != 0) result += ", ";
    result += " " + o + ": "+ o.ordinal();
  }
  result += " }";
  return result;
}

このような列挙型と呼び出しが与えられた場合:

public enum Role { EMPLOYEE, LEADER }

System.out.println(getEnumAsJavaScript(Role.class));

次のJavaScriptオブジェクトが生成されます。

var Role = { EMPLOYEE: 0,  LEADER: 1 }
于 2012-12-17T20:38:50.537 に答える