广泛的设计/体系结构问题。如果在GUI中有嵌套组件,这些组件与数据交互的最常见方式是什么?嵌套组件应该如何在GUI应用程序中与模型交互?
例如,假设组件接收到其中一个按钮的点击以保存数据。是否应该将保存请求委托给该组件的祖先,最高祖先最终将请求传递给控制器?
或者GUI应用程序中的模型/数据存储区通常是单个的,这样一个层次结构的任何级别的组件都可以直接获取/设置数据?
或者是作为组件层次结构的依赖项注入的控制器,以便任何给定的组件只是一个远离数据存储区/模型的中间组件?
广泛的设计/体系结构问题。如果在GUI中有嵌套组件,这些组件与数据交互的最常见方式是什么?嵌套组件应该如何在GUI应用程序中与模型交互?
例如,假设组件接收到其中一个按钮的点击以保存数据。是否应该将保存请求委托给该组件的祖先,最高祖先最终将请求传递给控制器?
或者GUI应用程序中的模型/数据存储区通常是单个的,这样一个层次结构的任何级别的组件都可以直接获取/设置数据?
或者是作为组件层次结构的依赖项注入的控制器,以便任何给定的组件只是一个远离数据存储区/模型的中间组件?
我的第一个想法是定义一个单独的数据层API,可由GUI组件调用。
如果你想要数据的多个实例,然后给出'句柄',它可以由GUI组件存储,并传递到数据层以再次获取数据。
这个想法与例如文件系统API类似;或一个SQL服务器API;或任何O/S API。
通常,有几个可能的选择与嵌套组件操作:
嵌套组件使用相同的模型作为根组件/嵌套组件使用其自己的模型。
嵌套组件与作为根组件的相同控制器进行交互/嵌套组件使用其自己的控制器进行操作。
有没有单一的正确答案使用什么选项。当然,使用相同的模型和相同的控制器是最简单的方法,但是如果嵌套组件包含复杂的UI逻辑,则最好将模型或/和控制器分开。
另外,你使用什么语言?什么平台?在不同的编程环境中,不同的实现更好。如果您使用平台支持面向对象的基于组件的GUI模型,则可以将嵌套控件嵌入到用户控件中,并获得可重用封装的易用组件。
我认为使用singletons模型/控制器是个坏主意,特别是你使用垃圾回收器的语言。使用单例很简单,但如果在根视图上需要第二个嵌套控件实例呢?
我同意上述STO:
只是一个供参考: 如果你是为一些额外的阅读,您也想看看http://compositewpf.codeplex.com,解决了组合的UI的推广问题。