Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 在何处存储UI信息_Database Design_User Interface_Architecture - Fatal编程技术网

Database design 在何处存储UI信息

Database design 在何处存储UI信息,database-design,user-interface,architecture,Database Design,User Interface,Architecture,假设我们有一个用于编辑小部件的表单。给定的小部件有一个属性。该属性(A)的值可以是存储的属性列表(1、2、3)之一。我们的属性列表用于多种小部件类型 现在,从数据的角度来看,给定的小部件可以具有列表中任何一个的属性a(它可以包含值1、2或3)。但是,我们的业务规则规定小部件类型X不能包含属性A中的值1 我的问题是,我在哪里存储表单用于填充属性A列表的信息 现在,我恰好为小部件X、Y和Z使用了不同的表单,但理论上,我们可能需要在相同的表单上解决这个问题。我可以将其存储在Widget类或Attrib

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

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

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

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

用C#写这篇文章,但我觉得这个问题与语言无关

用户Blueberry回复后添加:

谢谢,也许我的描述不清楚。设想一个Widgets表、一个Attributes表和一个Widget_Attributes表,它是一个x-ref,包含允许分配给Widget的给定属性的属性。这是一种方法,但看起来像是一种代码味道,因为它可能会为小部件上的每个属性生成一个x-ref表。因此,我正在寻找一种方法,只使用该类型小部件允许的属性值填充控件


现在的想法是在每个属性记录中添加一个标志枚举,以指示该属性对哪些小部件有效。在狗粮示例中,食物寿司将有一个EatenBy enum属性,该属性的值为1,其中enum将定义为Human=1、Dog=2、Cat=4。

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

首先,我不认为有一个正确或错误的答案。这实际上取决于逻辑与UI的接近程度。如果它是以任何方式的业务逻辑,我会让它不受控制(比如说组合框),但是,如果它是纯UI(比如说日期时间选择器中的逻辑),它会进入控件

但是,从我从你的具体案例中收集到的信息来看,第一个更接近。如果您使用的是MVC体系结构,那么与视图或控制器相比,这个逻辑可能更接近我的模型

我想这只是一个更复杂的版本,比如说,一个组合框就可以了,我想肯定的是,为了保持这个通用性,它不会成为表单或控件本身的一部分,因为这将是一个非常特殊的情况。可能只有您才会使用代码,但在一般的编码实践中,将此细节保持在您的控制之外至少会允许更好的代码重用

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


希望这对我有所帮助,只是我的观点。

这不完全是我想要的,但我认为我是唯一一个站出来的人。谢谢