Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.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
Model view controller 嵌套组件应该如何与GUI应用程序中的模型交互?_Model View Controller_User Interface_Design Patterns_Oop - Fatal编程技术网

Model view controller 嵌套组件应该如何与GUI应用程序中的模型交互?

Model view controller 嵌套组件应该如何与GUI应用程序中的模型交互?,model-view-controller,user-interface,design-patterns,oop,Model View Controller,User Interface,Design Patterns,Oop,广泛的设计/架构问题。如果GUI中有嵌套组件,那么这些组件与数据交互的最常见方式是什么 例如,假设一个组件在其按钮上点击一次以保存数据。是否应该将保存请求委托给该组件的祖先,最上层的祖先最终将请求传递给控制器 或者GUI应用程序中的模型/数据存储通常是单例的,因此层次结构中任何级别的组件都可以直接获取/设置数据 或者控制器是作为组件层次结构的依赖项注入的,因此任何给定的组件都只是数据存储/模型的一个中间层?我的第一个想法是定义一个单例数据层API,GUI组件可以调用它 如果您想要多个数据实例,那

广泛的设计/架构问题。如果GUI中有嵌套组件,那么这些组件与数据交互的最常见方式是什么

例如,假设一个组件在其按钮上点击一次以保存数据。是否应该将保存请求委托给该组件的祖先,最上层的祖先最终将请求传递给控制器

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


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

我的第一个想法是定义一个单例数据层API,GUI组件可以调用它

如果您想要多个数据实例,那么就给出“句柄”,它可以由GUI组件存储,并传递到数据层以再次取出数据


这个想法类似于,例如,文件系统API;或SQL server API;或者任何O/S API。

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

如果您想要多个数据实例,那么就给出“句柄”,它可以由GUI组件存储,并传递到数据层以再次取出数据


这个想法类似于,例如,文件系统API;或SQL server API;或任何O/S API。

通常,使用嵌套组件操作的选项很少:

  • 嵌套组件使用与根组件相同的模型/嵌套组件使用自己的模型

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

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

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


我认为在模型/控制器中使用单例是个坏主意,尤其是在垃圾收集器中使用语言。使用singleton很简单,但是如果您需要根视图上嵌套控件的第二个实例怎么办

通常情况下,很少有可能使用嵌套组件进行操作:

  • 嵌套组件使用与根组件相同的模型/嵌套组件使用自己的模型

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

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

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


我认为在模型/控制器中使用单例是个坏主意,尤其是在垃圾收集器中使用语言。使用singleton很简单,但是如果您需要根视图上嵌套控件的第二个实例怎么办

我同意上述观点:

  • 将数据推送到底层控制器/视图模型,与父视图的C/VM共享,这是我在大多数应用程序中所做的
  • 单身是个坏主意!如果您认为需要单例,那么可以通过调用缓存实例的工厂来实现相同的结果。例如,factory.GetAcountViewModel()
  • 一般来说,我不会将处理委托给家长。这降低了代码的可测试性,因为现在您正在通过UI层传递数据和状态
仅供参考:
如果您还想继续阅读,您可能还想签出,这解决了组合UI的一般问题。

我同意上面的观点:

  • 将数据推送到底层控制器/视图模型,与父视图的C/VM共享,这是我在大多数应用程序中所做的
  • 单身是个坏主意!如果您认为需要单例,那么可以通过调用缓存实例的工厂来实现相同的结果。例如,factory.GetAcountViewModel()
  • 一般来说,我不会将处理委托给家长。这降低了代码的可测试性,因为现在您正在通过UI层传递数据和状态
仅供参考: 如果您还想阅读一些额外的书籍,您可能还想签出,这解决了可组合UI的一般问题