【问题标题】:C# MVC Pattern HelpC# MVC 模式帮助
【发布时间】:2011-01-24 15:53:09
【问题描述】:

我正在尝试将我的 Winforms 代码重构为 MVC 模式。我以前从未使用过这种模式。

显然,GUI 将是视图,控制器将是由任何用户与 GUI 交互调用的“中间层”,模型执行所需的任务并通知视图任何状态变化。

我的问题是,对于模型,我假设它可以跨越大量类并且不限于一个“模型”类?另外,这三个部分可以都在同一个程序集中吗?

谢谢。

【问题讨论】:

  • 为什么使用 MVC for Winforms - 为什么不使用 MVVM?
  • 我从没听说过那个。我现在就查一下……你有什么好的链接吗?谢谢。

标签: c# winforms model-view-controller


【解决方案1】:

对于 Winforms,我不建议使用 MVC - id 建议使用 MVVM

试试这个教程http://weblogs.asp.net/dwahlin/archive/2010/09/30/silverlight-sessions-coming-to-devconnections-las-vegas-november-1-4.aspx

本文提到了 Silverlight,但 MVVM 模式是通用的,可以应用于 Winforms

正如 Roger Lipscombe 所指出的 - MVP 也可以工作 - 试试这个以获取有关 http://davybrion.com/blog/2010/08/mvp-in-silverlightwpf-architectural-overview/ 的信息 - 在这种情况下再次特定于 Silverlight,但作为一种模式,它可以适应

【讨论】:

  • 在 Winforms 中,我发现它更多的是 Model-View-Presenter (MVP),因为数据绑定不如 WPF 或 Silverlight 好。但这只是语义,我猜。
  • 100% 正确-我也会更新我对 MVP 的答案-感谢您的提醒。我不觉得 MVC 通常适用于 winforms 虽然
  • 谢谢,会检查的。刚刚找到这个 Martin Fowler 链接,看起来非常好读.....martinfowler.com/eaaDev/uiArchs.html
  • 我能否再问一个相关问题 - 如果我的 Winform 有一个动态创建的树视图,当单击节点时会显示更多数据。视图会基本上告诉演示者它是哪个节点,然后演示者会从这里开始吗?
【解决方案2】:

对于 Winforms,我建议学习 MVP(模型/视图/演示者)和 MVC 模式。尽管其他人认为 MVVM 可能是一个好主意,但我不同意 - MVVM 利用 WPF 中提供的数据绑定,虽然 Winforms 在一定程度上支持绑定,但它不像 WPF 架构/对象模型那样以绑定为中心。

“模型”层可以包含许多类,在对架构的这一层中的类进行建模时,我将始终使用“单一职责原则”以及其他 Solid 原则。

有用的链接:

【讨论】:

    【解决方案3】:

    不,模型不限于一个模型类。在模型中,您通常代表您的数据库和其他与数据相关的东西。控制器负责大部分操作。

    是的,所有这些组件都将放在一个 dll 中。打赌会有很多其他文件,比如视图文件,它们并不总是在 MVC 中编译(但你可以强制这样做)。

    【讨论】:

      【解决方案4】:

      您可能想考虑将“模型”类作为接口。然后您的所有特定模型都实现了该接口,但共享通用方法(例如更新、删除等)

      它们绝对可以写在同一个程序集中。你的文件夹结构(严格来说)应该遵循 Models/Views/Controllers 结构,并将代码文件分别放在它们下面。

      【讨论】:

        【解决方案5】:

        如果您决定尝试 MVP 模式,这是 Winforms 的不错选择,请查看MVC#,这是一个用于构建 MVP 应用程序的框架。这很简单也很好。

        【讨论】:

          【解决方案6】:

          也许您对我将 MVC/MVP 模式与数据绑定与流畅接口相结合的方法感兴趣。 mvc and databinding, what is the best approach?

          在我看来,如果使用 MVC、MVP 或 MVVM 是一个角度问题。它们都将导致数据的抽象、逻辑和数据的可视化。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-12-21
            • 2011-04-30
            • 2011-11-26
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-06
            • 1970-01-01
            相关资源
            最近更新 更多