【问题标题】:VB WPF MVC (Model + View + ?)VB WPF MVC(模型+视图+?)
【发布时间】:2010-07-05 12:26:04
【问题描述】:

我有一个旧的 VB6 应用程序。我想使用 WPF 在 VB.Net 中重新创建它。但我对“模型视图控制器”模式有点困惑。我有两本关于设计模式的书(GoF 和 J.Bishop),因为这两本书中确实没有提到这种模式。我还搜索了互联网,发现了一些 java 示例。但是我仍然不知道应该如何在我的新 WPF 应用程序中使用 MVC 模式(应该吗?)。
例如,假设我的模型(实际上它更复杂)只是一个具有制造商、直径和深度属性的轮辋(圆)。用户应该能够使用文本框和组合框修改属性。
有人可以创建一个小例子来解释 WPF 的 MVC 模式吗? 当然,我喜欢可重用类在整个应用程序中都有一个可行的概念。
提前致谢 哎呀

【问题讨论】:

    标签: wpf vb.net model-view-controller design-patterns


    【解决方案1】:

    这里是 MVC 模式是什么以及我如何将它应用到 WPF 应用程序的“简要”描述。

    (由于我主要在 Silverlight 中进行黑客攻击,因此我可能有一些细节略有偏差,但概念非常相似。)

    基本上,这个想法是分离关注点并定义应用程序不同部分之间的接口,目标是保持代码的结构化和可维护性。

    您示例中的 Model 与您描述的轮辋几乎完全相同 - 一个 WheelRim 类,具有在合适的数据类型中定义的各种属性。我会将模型放在一个单独的程序集中,以使其与其他代码分开,但您可以满足于将模型类保存在“模型”文件夹中。该模型在数据库中也会有一个“双胞胎”,模型类几乎是一对一映射到表的。

    (您可能想看看 Linq2SQL 或实体框架,如果定义了数据库,您几乎可以免费获得模型以及合适的数据库访问代码。)

    View 将是实际的 WPF xaml 文件 - 定义 Grid 或 Canvas 或你有什么。在 WheelRimView 上会有用于显示或访问不同属性的标签和文本框,可能还有产品图像等。视图背后的代码将包含所有相关的事件处理程序(start、button_click 等),用于从字段中获取数据并将它们传递给控制器​​。

    控制器 可以是您用来操作数据的任何“处理程序代码”。我们在这里讨论的是基本的 CRUD 操作,以及验证等。此外,控制器层将负责以可以无缝进入视图的格式编译数据。 WheelRimController 因此会有“GetWheelRimList”、“GetWheelRim”、“AddWheelRim”、“ModifyWheelRim”和“DeleteWheelRim”等方法。这些方法将值作为参数并相应地操作模型对象。

    我建议保持 xaml 文件的代码隐藏不受任何“控制器”-ish 代码(如验证、聚合等)的影响 - 后面的代码基本上应该只从文本框、列表框等中获取值并发送它们按“原样”向控制器方法进行处理。此外,在获取用于演示的数据时,您应该将任何数据格式化代码保持在最低限度(即视图中不进行过滤或翻译)。

    “用户打开轮辋并编辑直径”的典型用例将在代码中出现:

    1. 用户单击列表页面上的“编辑”。 WheelRimView 页面加载。
    2. WheelRimView.Load() 方法(或相应的)调用 WheelRimController.GetWheelRim(wheelRimId)。
    3. WheelRimController.GetWheelRim(wheelRimId) 从数据库表中获取相应数据并填充 WheelRim 对象的属性,该对象返回到 WheelRimView。
    4. WheelRimView 将属性值插入标签和文本框。
    5. 用户更改直径值并单击“保存”按钮。
    6. WheelRimView.Save() 方法调用 WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 方法。
    7. WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 方法解析直径(如果是字符串)并加载模型对象。它将修改后的值应用于模型对象并将其保存到数据库中。
    8. WheelRimController.ModifyWheelRimDiameter(wheelRimId, diameter) 向 WheelRimView 返回一个状态代码(例如一个预定义的数字,说明任何验证错误)以报告保存成功。
    9. WheelRimView 向用户显示结果消息(跳跃式“已保存”)。

    我希望这能解决一些问题。

    【讨论】:

      【解决方案2】:

      由于提供了丰富的绑定支持,WPF(和 Silverlight)非常适合 MVVM(模型-视图-视图模型)。 MVVM 是 MVC 的扩展,它使用视图模型来绑定视图的当前状态,而不是直接操作视图。

      有很多可用的 MVVM 框架,以及 Microsoft 自己的 Prism 框架(可以说,如果您有更大的模块化应用程序,它会更有用)。

      【讨论】:

        【解决方案3】:

        WPF 可能更适合 MVVM(模型-视图-视图模型)。我建议您阅读此 MSDN article on MVVM,也许还可以听从他们的建议。我在Bryant Likes blog 上还找到了一系列不错的链接。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-10
          • 1970-01-01
          • 1970-01-01
          • 2010-11-24
          • 2010-11-18
          相关资源
          最近更新 更多