ウィジェットの編集に使用するフォームがあるとします。特定のウィジェットには属性があります。その属性 (A) の値は、格納された属性 (1、2、3) のリストのいずれかになります。属性のリストは、いくつかのウィジェット タイプで使用されます。
ここで、データの観点から、特定のウィジェットは任意のリストの属性 A を持つことができます (値 1、2、または 3 を含むことができます)。ただし、ビジネス ルールでは、ウィジェット タイプ X の属性 A に値 1 を含めることはできません。
私の質問は、フォームが属性 A のリストに入力するために使用する情報をどこに保存すればよいかということです。
ここで、ウィジェット X、Y、Z に別のフォームを使用していることがありますが、理論的には、同じフォームでこれに対処する必要があります。Widget クラスまたは Attribute クラスに格納できますが、これは実際のオブジェクト情報を表していないと思います (「寿司」は、完全に有効な Food of the Dog クラスであっても、有効な Food of the Dog クラスではないのと同じです)。食べ物、それは犬を説明するものではありません)。犬の編集フォームのフード リストにどのようにデータを入力しますか? ユーザーは気まぐれで、最終的に誰かが犬の寿司を食べたいと思うので、承認されたリスト情報を編集可能にする必要があり、コードを再展開する必要はありません。
これを C# で書いていますが、この質問はかなり言語に依存していないと思います。
ユーザー Blueberry からの応答後に追加:
ありがとう、私の説明がわかりにくかったかもしれません。Widgets テーブル、Attributes テーブル、および Widget_Attributes テーブルが、Widget の特定のプロパティに割り当てることができるAttributesを含む x-ref であると想像してください。これは 1 つの方法ですが、ウィジェットの各プロパティの x-ref テーブルが作成される可能性があるため、コードの臭いのように思えます。そのため、そのタイプのウィジェットに許可されている属性値のみをコントロールに設定する方法を探しています。
現在リードしているアイデアは、属性が有効なウィジェットを示すフラグ列挙型を各属性レコードに追加することです。Dog-Food の例では、Food 寿司には値 1 を持つ EatenBy 列挙型プロパティがあり、列挙型は Human = 1、Dog = 2、Cat = 4 として定義されます。