0

广泛的设计/体系结构问题。如果在GUI中有嵌套组件,这些组件与数据交互的最常见方式是什么?嵌套组件应该如何在GUI应用程序中与模型交互?

例如,假设组件接收到其中一个按钮的点击以保存数据。是否应该将保存请求委托给该组件的祖先,最高祖先最终将请求传递给控制器​​?

或者GUI应用程序中的模型/数据存储区通常是单个的,这样一个层次结构的任何级别的组件都可以直接获取/设置数据?

或者是作为组件层次结构的依赖项注入的控制器,以便任何给定的组件只是一个远离数据存储区/模型的中间组件?

回答

2

我的第一个想法是定义一个单独的数据层API,可由GUI组件调用。

如果你想要数据的多个实例,然后给出'句柄',它可以由GUI组件存储,并传递到数据层以再次获取数据。

这个想法与例如文件系统API类似;或一个SQL服务器API;或任何O/S API。

1

通常,有几个可能的选择与嵌套组件操作:

  • 嵌套组件使用相同的模型作为根组件/嵌套组件使用其自己的模型。

  • 嵌套组件与作为根组件的相同控制器进行交互/嵌套组件使用其自己的控制器进行操作。

有没有单一的正确答案使用什么选项。当然,使用相同的模型和相同的控制器是最简单的方法,但是如果嵌套组件包含复杂的UI逻辑,则最好将模型或/和控制器分开。

另外,你使用什么语言?什么平台?在不同的编程环境中,不同的实现更好。如果您使用平台支持面向对象的基于组件的GUI模型,则可以将嵌套控件嵌入到用户控件中,并获得可重用封装的易用组件。

我认为使用singletons模型/控制器是个坏主意,特别是你使用垃圾回收器的语言。使用单例很简单,但如果在根视图上需要第二个嵌套控件实例呢?

1

我同意上述STO:

  • 推数据到底层控制器/视图模型,其与所述父视图的C/VM共享是我在我的大多数应用程序做。
  • 单身是一个坏主意!如果您认为您需要单例,则可以通过调用缓存实例的Factory来获得相同的结果。例如。 factory.GetAcountViewModel();
  • 我不会将处理委托给父项 - 一般来说。这会降低代码的可测试性,因为现在您正在通过UI层传递数据和状态。

只是一个供参考: 如果你是为一些额外的阅读,您也想看看http://compositewpf.codeplex.com,解决了组合的UI的推广问题。

相关问题