1

この機能を備えたシステムの基本設計についてアドバイスを求めています。

次のようなデータクラスがあるとしましょう:

Class nodeData
boolean aValue;
boolean bValue;
boolean cValue;

一連のビジネス ロジックを使用して、このデータが表すノードに相互に排他的な一連のタイトルを定義します。

たとえば、次のタイトルを定義します。

Singular.YES means Only one of aValue, bValue, cValue is true
Singular.NO means 0 or more than 1 of aValue, bValue, cValue is true

またはこれ:

aDefined.YES means aValue is true.
aDefined.NO means aValue is false.

またはこれ:

totalTrue:.0 means 0 of the values are true
totalTrue.1 means 1 of the values are true
etc.

これらの各ケースでは、タイトルは同じセット内で相互に排他的であり、セット内のどのタイトルがそのデータに適用されるかは、ハードコーディングされたビジネス ロジックに基づいています。

次に、それぞれの特定のタイトルが特定の機能に関連付けられます。たとえば、「aDefined.YES の場合、methodX を呼び出します」または「totalTrue.0 の場合、methodX を呼び出してから methodY を呼び出します」と言うことができます。

タイトル セットの数を N とすると、N 個あります。タイトルの組み合わせ、N! 関連する機能の組み合わせ。達成方法: 各ノード データについて、そのデータに関連付けられた一連のタイトルを見つけます。これらの各タイトルに関連付けられた機能を実行します。

編集:これはブール論理の問題ではなく、設計上の問題です。要点は、任意のビジネス ロジックを指定して、データ セットを何らかの名前またはサブクラスに関連付ける堅牢な方法が必要だということです。

4

1 に答える 1

1

値の部分をスキップする
これは役立つと思いますが、あなたの質問は少しあいまいです。

//checking if one of the 3 bools are true
if((a&&!b&&!c)||(!a&&b&&!c)||(!a&&!b&&c))
    Singular = Singular.YES
else
    Singular = Singular.NO

//checking if one bool is true
if(a)
    aDefined = aDefined.YES
else
    aDefined = aDefined.NO

//checking how many bools are true
int i = 0;
if(a)
    i++;
if(b)
    i++;
if(c)
    i++;
TotalTrue = i;
于 2013-02-11T22:39:01.017 に答える