代码之家  ›  专栏  ›  技术社区  ›  Chris Pietschmann

如何在Windows窗体应用程序中实现MVC?

  •  69
  • Chris Pietschmann  · 技术社区  · 17 年前

    我不开发太多的桌面/Windows窗体应用程序,但我突然想到,在Windows窗体中使用MVC(模型-视图-控制器)模式可能会有一些好处。NET开发。

    有人在Windows窗体中实现了MVC吗?如果是这样,你对设计有什么建议吗?

    6 回复  |  直到 17 年前
        1
  •  44
  •   Ryan Lundy    9 年前

    我过去所做的就是使用类似的东西, Model-View-Presenter .

    [注意:这篇文章以前可以在网上找到。要现在看到它,你需要下载CHM,然后查看文件属性并单击“解除阻止”。然后你可以打开CHM并找到这篇文章。非常感谢,微软! 叹气 ]

    表单就是视图,我有一个IView界面。所有的处理都发生在演示者中,演示者只是一个类。该表单创建了一个新的演示者,并将其自身作为演示者的IView传递。这种测试方式可以传递一个假的IView,然后从演示者向其发送命令并检测结果。

    如果我要使用一个完整的模型视图控制器,我想我会这样做:

    • 形式是 看法 它向模型发送命令,引发控制器可以订阅的事件,并订阅模型中的事件。
    • 这个 控制器 是一个订阅视图事件并向视图和模型发送命令的类。
    • 这个 模型 引发视图订阅的事件。

    这将符合 the classic MVC diagram 最大的缺点是,对于事件,很难分辨谁订阅了什么。MVP模式使用方法而不是事件(至少是我实现它的方式)。当表单/视图引发事件(例如someButton.Click)时,表单只需调用演示者上的方法来运行其逻辑。视图和模型根本没有任何直接连接;他们都必须通过演讲者。

        2
  •  21
  •   dguaraglia    17 年前

    好吧,实际上Windows Forms实现了MVC的“自由风格”版本,就像一些电影实现了一些经典书籍(罗密欧与朱丽叶浮现在脑海中)的一些糟糕的“自由样式”解释一样。

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

    如果您使用Windows窗体和适当的OOP技术,并且可能使用类似ORM的EntitySpaces进行数据库访问,那么您可以这样说:

    1. ORM/OOP基础架构是模型
    2. 形式即观点
    3. 事件处理程序是控制器

    尽管用同一个对象表示View和Controller会使代码与表示方式的分离变得更加困难(在从Microsoft.Windows.Forms.Form派生的类中插入“GTK+视图”没有简单的方法)。

    如果你足够小心,你能做什么。保留您的表单代码 完全地 通过仅在事件处理程序中编写与GUI相关的内容,以及在单独的类中编写所有其他业务逻辑,将其与控制器/模型代码分开。在这种情况下,如果你想使用GTK+编写另一个视图层,你只需要重写GUI代码。

        3
  •  16
  •   41686d6564    8 年前

    Windows窗体不是从头开始设计使用MVC的。你有两个选择。

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

    其次,您可以使用为Windows窗体设计的MVC框架。

    第一种方法很容易开始,但越深入,就越复杂。我建议寻找一个好的、预先存在的、经过良好测试的MVC框架,设计用于与Windows窗体配合使用。我相信 this blog post 这是一个不错的起点。

    对于任何刚开始的人来说,如果你有选择的话,我建议跳过Windows窗体,针对WPF进行开发。这是一个创建UI的更好的框架。有许多MVC框架正在为WPF开发,包括 this one that one .

        4
  •  4
  •   aridlehoover    17 年前

    据微软称,@jasonbunting提到的UIP应用程序块是“存档的” Smart Client Application Block 或更新的 Smart Client Software Factory ,同时支持WinForms和WPF SmartParts。

        5
  •  2
  •   Jason Bunting    17 年前

    查看 User Interface Process (UIP) Application Block 我对它了解不多,但几年前看过。可能有更新的版本,请四处查看。

    “UIP应用程序块基于模型-视图-控制器(MVC)模式。”

        6
  •  1
  •   Richard    17 年前

    看看MS Patterns and Practices Smart Client应用程序块,其中有一些指导和类,可以引导您在windows窗体中实现模型-视图-演示者模式-看看包含的参考应用程序。

    对于WPF,这将被 prism 项目

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

    推荐文章