这是一个关于用户界面设计和编程模式的一般性问题,尽管我的问题来自于我正在开发的一个WPF应用程序。
当数据模型是层次化的并且层次化深度> 2级时,呈现数据驱动的用户界面的干净、优雅的模式是什么?所谓最干净,我指的是一种方法,它只需要很少的重复代码(相对于为每个数据模型类型编写一个表单),而且不需要太多的烦琐。例如,它可能依赖于反射。我想这就是为什么我们有嵌套的数据网格。您可以在行详细信息模板中嵌套子对象。几乎所有的LOB应用程序都依赖于分层数据,所以一定有人已经解决了这个问题。
但问题是,如果主网格有许多不同的子细节网格怎么办?用户界面可能看起来杂乱的细节网格,嵌套到主网格和堆叠在彼此的顶部。
我的一些想法可能是尝试一个标签控件,嵌套在主网格。另一种方法是在新视图中打开一个新的数据网格,不嵌套网格,但是为每个网格创建一个新视图似乎是我首先试图避免的繁琐工作。
除了对每个视图(和视图模型)逐一编码之外,是否有更清晰的替代方案可以在分层数据模型上构建"数据之上的文本框"LOB应用程序?从根本上说,这是一个关于如何表示树的问题。在这个问题上没有很多好的共识;这是一个棘手的问题。当然,嵌套数据网格的方法是有效的,但是当您将其描述为潜在的混乱时,您一针见血。
在某种程度上,这个问题的答案与当你在给定的层次上进行交互时,你需要多少关于树的其余部分的信息有关。你真的需要知道树的根结点,以及根结点的所有子结点吗,当你在处理下两层的叶结点时?当然有这样的用例,在这些用例中,选择一种让您可以看到所有子节点的表示结构(就像在您的嵌套网格方法中一样)是有意义的。在其他情况下,你不需要知道树中更高层次的信息;在这些情况下,将低级数据的表示隔离到自己的表示区域(页面)中是非常有意义的。
有各种不同的方法来解决这个问题。你看过prezi吗?这非常令人印象深刻,令人印象深刻的部分原因是数据有一种"位置"感;它利用人类自身的空间感来帮助理解复杂的数据和层次结构;缩放确实锁定了空间方向感(偶尔会迷失方向)。
就你的实际问题而言;想想REST,特别是HATEOAS期望。实际上,可以考虑独立于表示对数据进行建模,然后让表示成为相对较薄的层,而不是密集的视图模型。可能有一些东西需要调整,但最重要的是,如果整个视图模型需要调整,您可以相对容易地返回并修改它。同样,数据模型倾向于暗示对给定数据集有意义的某种结构;实际上,这是一个从数据中识别结构并找到最适合该结构的显示模型的问题。通过不向严格的视图模型提交大量工作,您可以根据需要进行更改。敏捷的UI设计,大致。
这个东西是非常主观的,它真的取决于你的组织和你的需求;对于所有的解决方案,没有一个好的答案。祝你好运;你至少问对了问题!