0

假设我们有一个用于编辑小部件的表单。一个给定的 Widget 有一个 Attribute。该属性 (A) 的值可以是存储的属性列表 (1, 2, 3) 之一。我们的属性列表用于多种 Widget 类型。

现在,从数据的角度来看,给定的 Widget 可以具有任何列表的属性 A(它可以包含值 1、2 或 3)。但是,我们的业务规则规定 Widget 类型 X 不能在属性 A 中包含值 1。

我的问题是,我在哪里存储表单将用于填充属性 A 列表的信息?

现在,碰巧我为小部件 X、Y 和 Z 使用了不同的表单,但理论上,我们可能不得不在同一个表单上解决这个问题。我可以将它存储在 Widget 类或 Attribute 类中,但我觉得这并不代表实际的对象信息(同样,“sushi”不是 Dog 类的有效 Food,即使它是完全有效的食物,它无法描述狗)。您将如何填充“编辑狗”表单上的“食物”列表?我需要批准的列表信息是可编辑的,并且不需要重新部署代码,因为用户是善变的,最终有人会想要喂他们的狗寿司。

用 C# 编写这个,但我觉得这个问题与语言无关。

在用户 Blueberry 回复后添加:

谢谢,可能我的描述不是很清楚。想象一个 Widgets 表、一个 Attributes 表和一个 Widget_Attributes 表,这将是一个包含允许分配给 Widget 的给定属性的 Attributes 的外部参照。这是可以做到的一种方式,但看起来像是代码异味,因为它可能会导致 Widget 上的每个属性都有一个外部参照表。所以我正在寻找一种方法来填充控件,该控件仅使用该类型小部件允许的属性值。

现在主要的想法是向每个属性记录添加一个标志枚举,以指示该属性对哪些小部件有效。在 Dog-Food 示例中,Food sushi 将具有值为 1 的 EatenBy 枚举属性,其中枚举将定义为 Human = 1、Dog = 2、Cat = 4。

4

1 回答 1

0

如果我正确理解您的问题,您有一个小部件,它根据用户在您控件的另一部分中选择的数据具有不同的行为?

首先,我认为对此没有正确或错误的答案。这实际上取决于逻辑与 UI 的接近程度。如果它以任何方式存在业务逻辑,我会将其置于控制之外(例如组合框),但是,如果它是纯粹的 UI(例如日期时间选择器中的逻辑),它将进入控制。

尽管如此,从我从你的具体案例中收集到的信息来看,它更接近第一个。如果您使用的是 MVC 架构,我可能会让这个逻辑更接近我的模型,而不是我的视图或控制器。

我想这只是一个更复杂的版本,一个 ComboBox 会做,我会说当然为了保持这个通用性,它不会成为表单或控件本身的一部分,因为这将是一个非常具体的情况。可能只有您会使用代码,但在一般的编码实践中,将这些细节保留在您的控制之外将至少允许更好的代码重用。

根据数据的复杂性,您可以做的是创建一个包含所有这些数据的对象,在模型上创建它并将其传递给小部件,以便它知道当控件数据的各种组件时该怎么做由用户选择。IE 控件将理解但在模型上生成的对象。如果数据足够静态,则不必严格调用模型,这可能会在初始化时传入。

希望有帮助,只是我的看法。

于 2012-06-27T03:25:21.697 回答