我在某处读过一个声明,从数据库布局(或业务对象,或任何其他业务层)自动生成 UI 是一个坏主意。我还可以想象为了做出这样的事情,人们必须面对一些好的挑战。

然而,我还没有看到(也找不到)任何人们尝试这样做的例子。因此我想知道——事情真的有那么糟糕吗?这绝对不容易,但能否取得任何成功呢?主要障碍是什么?很高兴看到一些成功和失败的例子。

为了澄清 - “自动生成 UI”我的意思是所有表单及其所有控件都是完全自动生成的(在运行时或编译时),可能基于元数据中有关如何表示数据的一些提示。这与手工设计表单(就像大多数人所做的那样)形成鲜明对比。

添加: 成立 这个有点相关的问题

添加2: 好吧,看来获得相当公平结果的一种方法是是否有足够的与演示相关的元数据可用。对于这种方法,多少才算“足够”?它会比手动设计表单更少工作吗?它是否也为未来的变化提供了更大的灵活性?

有帮助吗?

解决方案

我们有一个项目,该项目将生成数据库表/存储过程以及来自商业类的用户界面。它在.NET做,我们使用了大量的自定义属性的类和属性,以使其行为,我们如何想它。它的工作虽然很大,如果你成功地按照你的设计,你可以真正轻松地创建软件的自定义设置。我们也确实有把在“定制”用户控件一些非常特殊的情况下的一种方式。

总之它的工作很适合我们。不幸的是它是一个出售银行产品,并且没有可用的源。

其他提示

这是确定的东西,微小的,所有你需要的是一个功利的方法来获取数据。

有任何类似,虽然实际的应用中,这是一个可怕的想法。是什么让一个好的UI是人源化的因素,你调整,以确保本机以及一个人的触摸反应的位。

您就不能得到,当被机械产生的界面....以及可能与一些接近AI。 :)

编辑 - 澄清:从代码/ DB产生的UI是细为起点,它只是一个垃圾终点

嘿,这并不难实现,而且也不是一个坏主意。这完全取决于您的项目需求。许多软件产品(请注意,不是项目,而是产品)都依赖于这种模型 - 因此他们不必针对不同的客户需求重写代码/用户界面逻辑。客户可以使用管理系统中的设计器表单按照自己想要的方式自定义用户界面

我已经使用 xml 来保存此类内容的元数据。我为每个字段保存的一些属性是:

  1. 友好名称(标签标题)
  2. HaspreDefinedValues(是的,下拉列表 /多复选框列表)
  3. 多选(如果是,则复选框) list,如果没有,则下拉列表)
  4. 数据类型
  5. 最长长度
  6. 必需的
  7. 最小值
  8. 最大值
  9. 正则表达式
  10. 启用(显示或不显示)
  11. sortkey(网络表单上的订单)

关于定位 - 我不太关心,只是在另一个下面生成表 tr td 标签 1 - 但是如果您也想实现这一点,您可以再拥有 1 个名为 CssClass 的属性,您可以在其中定义 ui 特定属性(外观和感觉,定位等)在这里

更新:另请注意,当您想要输入产品信息时,许多电子商务产品都遵循这种动态用户界面 - 因为他们的客户可以销售从家具到性玩具的所有东西;-) 因此,他们不必为每个不同的行业重写代码只需让他们的客户通过管理表单输入产品属性的元数据:-)

我也推荐你看看 实体-属性-值模型 - 它有自己的优点和缺点,但我觉得它可以很好地满足您的要求。

在我看来,你应该考虑一些事情:

  1. 客户是否需要自定义 UI 的功能?
  2. 是否有很多不同的属性或元素?
  3. 创建这样一个“渲染引擎”的努力值得吗?

好吧,我认为你应该考虑这些的原因很明显。这种模型是否有意义,这实际上取决于您的项目......如果您想创建一些可以在运行时自定义的表单,那么这个模型可能非常有用。另外,如果您需要做很多较小的工具并将其用作某种“引擎”,那么这种努力可能是值得的,因为您可以节省大量时间。使用这种“渲染引擎”,您可以自动添加错误报告、检查值或添加始终使用相同模式构建的其他内容。但如果你有太多这样的东西、元素或属性,那么性能会迅速下降。在更大的项目中变得有趣的另一件事是,必须在每种形式中发生的更改只需要在引擎中进行,而不是在每种形式中进行。如果完成的应用程序中存在错误,这可以节省大量时间。

在我们公司,我们在现金软件(现在我不记得正确的词......)和我们的应用程序之间使用类似的模型来创建界面生成器,只是它不创建 UI,而是创建一个输出文件之一应用程序。我们使用 XML 来定义结构以及值需要如何转换等等。

我会说,在大多数情况下,数据是不适合UI生成。这就是为什么你总是把逻辑的一个层之间来解释DB信息给用户。另一件事是,当你从数据库生成UI你最终会显示系统的东西,你通常不希望做的内部运作。

不过,这取决于DB来自哪里。如果它的建立是为了准确反映该系统的用户目标是。如果用户什么样的应用程序应该帮助他们存储在DB的心智模式。然后,它可能只是工作。但你的以开始在用户端。如果没有我建议你不要走那条路。

你能看从应用架构角度看问题了吗?我看你是另一个数据库恐怖 - 试图通过编写存储过程来解决一切。为什么有UI呢?尝试做它在DB的脚本。在这种方法的效果 - 什么复合系统上,你最终会?当系统提供不同的业务 - 尝试模块化,选择性发现的部件,限制共享引用。 UI应更换,从业务层独立。当数据库存储如此多的数据 - 有UI的硬依赖 - 系统成为整体。如何实现在场景中MVVM模式生成UI时?像混合设计师都含有大量的功能,这是不能被大多数未来的UI发生器来代替 - 除非 - 你的开发平台是记事本只。


有一种混合方法,其中表单和所有内容都在数据库中描述,以确保服务器端的一致性,然后对其进行编译以确保客户端部署的效率。

一个现实的例子是企业软件 MS Dynamics AX。

它有一个 '数据' 数据库和一个 '模型' 数据库。

'模型' 存储表单、类、作业以及应用程序运行所需的每个工件。

部署新的软件结构过去是转储模型数据库并启动CIL编译(CIL表示通用中间语言,微软在.net中使用的东西)

这种方式适合企业级软件,可以处理大型定制。但请记住,这种方法设置了一个框架,以后维护和自定义应用程序的任何人都应该很好地理解该框架。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top