你将如何在Windows窗体应用程序中实现MVC?(How would you implement

2019-06-18 00:10发布

我不制定太多的桌面/ Windows窗体应用程序,但它发生,我认为可能有一些好处的Windows窗体.NET开发使用MVC(模型 - 视图 - 控制器)模式。

有没有人实现MVC中的Windows窗体? 如果是这样,你对设计的任何提示?

Answer 1:

我已经在过去做的是使用类似的东西, 模型-视图-演示 。

[注:本文使用的是在Web上提供。 现在看到它,你需要下载CHM,然后查看文件属性,然后单击取消阻止。 然后你就可以打开CHM,找到这篇文章。 万分感谢,微软! 叹息 ]

的形式是图,我有它的IVIEW接口。 所有的处理发生在主持人,这仅仅是一个类。 表单创建一个新的主持人,并将自己作为主持人的iView中。 通过这种方式测试你可以在一个假的iView票代替,然后从主持人命令发送到它和检测结果。

如果我用一个完全成熟的模型 - 视图 - 控制器,我想我会做这种方式:

  • 的形式是 。 它发送命令给模型,引发事件其中控制器可以订阅,订阅和从模型的事件。
  • 控制器是预订视图的事件和命令发送到视图和模型中的类。
  • 模型提出了看法订阅事件。

这将适合与经典的MVC图 。 最大的缺点是,随着事件的,它可以是很难说谁的订阅内容。 MVP模式使用方法而不是事件(至少是这样,我实现它)。 当窗体/视图引发一个事件(例如someButton.Click),形式简单地调用上演示的方法来运行逻辑它。 该视图和模型不带任何直接连接; 他们都必须经历的主持人。



Answer 2:

嗯,其实Windows窗体实现MVC的“自由风格”的版本,很像一些电影实现一些经典书籍一些蹩脚的“自由风格”的解释(罗密欧与朱丽叶浮现在脑海中)。

我并不是说Windows窗体的实现是坏,只是......不同。

如果你使用Windows窗体和适当的OOP技术,也许像EntitySpaces为你的数据库访问的ORM,那么你可以说:

  1. 在ORM / OOP基础设施模型
  2. 该表单是视图
  3. 该事件处理程序控制器

尽管具有两个视图和控制器由相同的对象表示使从表示方式更难以分离代码(没有简单的方法来插件从Microsoft.Windows.Forms.Form派生的类是“GTK +视图”)。

你可以做什么,如果你足够细心。 是让你的表单代码从控制器/型号代码完全独立的只在事件处理程序编写GUI相关的东西,并在单独的类中的所有其他业务逻辑。 在这种情况下,如果你想使用GTK +再写视图层,你只需要重写GUI代码。



Answer 3:

Windows窗体不从地上爬起来使用MVC设计。 你有两个选择。

首先,你可以推出自己的MVC实现。

其次,你可以使用一个MVC框架设计用于Windows窗体。

首先是简单的开始做,但你得到了进一步的,更复杂的是。 我建议寻找一个良好的,已经存在并经过严格测试的,MVC框架设计与Windows窗体的工作。 我相信这个博客帖子是一个不错的起点。

对于任何人开始,我会建议跳过Windows窗体和开发针对WPF,如果你有选择。 它是用于创建用户界面更好的框架。 有对WPF开发许多MVC框架,包括这一个和那一个 。



Answer 4:

据微软称,通过@jasonbunting提到的UIP应用程序块的“存档”。 相反,看一下智能客户端应用程序块或甚至新的智能客户端软件工厂 ,同时支持WinForms和WPF SmartParts。



Answer 5:

检查到用户接口进程(UIP)应用程序块 。 我不很了解,但它在几年前看着。 可能会有新的版本,检查各地。

“该UIP应用程序块所依据的模型 - 视图 - 控制器(MVC)模式上。”



Answer 6:

看看在MS模式与实践智能客户端应用程序块具有一定的指导和引导您实现在Windows窗体模型视图主持人拍打类 - 看看参考应用包括在内。

对于WPF,这是由superseced 棱镜项目

软件工厂的方法是学习最佳实践的好方法



文章来源: How would you implement MVC in a Windows Forms application?