【问题标题】:Learning WPF and MVVM学习 WPF 和 MVVM
【发布时间】:2011-01-03 10:30:50
【问题描述】:

我最近加入了一个使用 WPF 和 MVVM 构建胖客户端应用程序的新开发项目。我在从 1.1 到 3.5 的各种 .NET 框架以及所有主要技术中开发了应用程序; WebForms、MVC 和 WinForms。在我所有的项目中,我都很享受其中的每一分钟,但在这个项目中,我觉得我很挣扎,因此没有那么享受它。当 .NET 3.5 在 2008 年问世时,我真的很喜欢学习新的语言功能(LINQ、MVC、Lambda 表达式等)并涉足 WPF,所以请不要以为我反对学习新东西。

但是这个项目的学习曲线似乎非常陡峭,我觉得在 WPF + 应用程序之上学习 MVVM 有点令人生畏。虽然我只参与该项目的时间很短(2 周),但我真的很喜欢 WPF,但不喜欢 MVVM 模式。我不喜欢 MVVM 模式可能是因为我不太了解它,而且我觉得我必须编写很多“非最佳实践”代码才能完成我在 WinForms 时代相对简单的事情。

所以我的问题是有没有其他人遇到过类似的情况,你是坚持使用 MVVM 还是转向另一个架构方向?

【问题讨论】:

    标签: c# .net wpf mvvm


    【解决方案1】:

    自从测试版以来我一直在使用 WPF,我永远不会回到 winforms。对我来说,MVVM 是一种哲学,忠实地实施它需要大量的工作和纪律。它鼓励 UI 和交互逻辑之间的完全解耦,这意味着没有任何代码,这意味着可测试的交互逻辑很难用 winforms 完成。

    与 gius 相比,我建议您坚持使用普通的 WPF 和 MVVM,尤其是当您刚开始使用 WPF 时。 MVVM 和 WPF 有很多东西要掌握,再加上这些只会减慢您的进度。但那只是我的个人意见。我总是更喜欢分层学习,而不是尝试一次学习所有内容,这样你就可以控制并且对应用程序的工作方式有更多的了解。

    如果您还没有这样做,我强烈建议您阅读有关 MVVM 的 MS 文章:

    http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

    非常棒,对于编写任何 WPF 代码的团队成员来说,它是必读的。

    我不确定您和您的团队是如何工作的,但您需要问问自己 MVVM 是否适合您。如果单元测试/测试驱动和解耦 UI 是您已经在做的事情或者对您很重要,那么 MVVM 绝对是一个不错的选择。如果您的团队对在后面编写代码感到满意,并且您不明白为什么要费心解耦,那么请不要打扰 MVVM,因为您会发现它会减慢您的速度。就我个人而言,后者永远不是我的选择。

    如果您对 WPF 或 MVVM 有任何具体问题,请随时与我联系。

    【讨论】:

    • 根据我的经验,忠实地实现 MVVM 需要大量的变通方法、hacks 和代码膨胀。我希望情况并非如此,但这就是我们目前的立场。
    【解决方案2】:

    我也遇到过类似的情况,我决定走的路线是:

    • 为我的视图使用 ViewModel,但要避免一些 MVVM 纯粹性,例如 Attached Behaviors(我觉得它既愚蠢又笨重)
    • 使用Magellan MVC framework,它最符合我关于应用程序应如何运行的心理模型。

    【讨论】:

    • 麦哲伦很棒,不知道为什么不受欢迎。
    【解决方案3】:

    我开始学习 WPF 并很快遇到了 MVVM - 它看起来非常适合我,我一直坚持下去。可能值得指出的是,人们实现 MVVM 的方式似乎确实存在一些差异,其中一个关键是 View-first 或 ViewModel-first。有些人似乎认为这是一个福音点——我没有足够的经验来决定是否应该这样做。我倾向于 View-first(因此 View 引用了 ViewModel,ViewModel 引用了 Model,而另一个方向没有),但我遇到了另一种方式更容易的场景。

    为什么不围绕您认为非最佳实践的特定点发布一些问题。它也可能有助于其他人在这个主题上摔跤。

    另一个问题:您是否使用特定的 MVVM 框架?

    【讨论】:

      【解决方案4】:

      嗯,在使用 MVVM 之前,我在 ASP.NET MVC 框架中使用了 MVC。模型-视图-控制器架构在那里非常明显,因此它帮助我改变了对标准 ASP.NET 和 WinForms 的态度。

      MVVM 有点“难以”理解,但是一旦您意识到 WPF 与 Web 不同(作为用户,您响应的是视图,而不是控制器),从 MVC 迁移到 MVVM 是有意义的。 我建议在Caliburn project 的主页上阅读有关 MVVM 的文章(左栏,第 3 部分。学习 MVVM)——这对我很有帮助。

      关于 WPF (Silverlight) 应用程序,我强烈建议在 PRISM (Composite WPF) 和/或 Caliburn 之上开始构建应用程序 - 尽管从一开始可能会令人困惑,但它仍然是比使用香草 WPF(谈论他们强迫您使用的做法)。但是请确定,一旦你完成了你的第一个 WPF 应用程序,你会想要从头开始重写它。但这就是您学习新技术时的工作原理。

      【讨论】:

        【解决方案5】:

        MVVM 只是一种设计模式。除非您对 WPF 感到满意,否则您不需要它。如果您正在学习 WPF,建议您先完成本书,然后再学习 MVVM。如果您尝试同时学习两者,您将尝试在每个简单的 WPF 应用程序中实现 MVVM,或者不了解 MVVM 使用的 WPF 的某些功能。

        P.S:当我自己面对这个问题时,我得出了这个结论。如果 ViewModel 对它一无所知,我仍然不明白如何创建一个新 View。

        【讨论】:

          【解决方案6】:

          WPF 具有陡峭的学习曲线。 MVVM 也是如此。这解释了您的感受:同时掌握 XAML 和 MVVM尝试同时生成真实世界的应用程序是一项艰巨的任务。

          我培训了像您这样的 .NET 开发人员,并帮助他们快速克服了学习曲线。然后将培训内容打包成一本速读书,您可以从这里获得:

          它也可以在亚马逊和主要图书网站上找到。

          很抱歉,这听起来像是自我广告,但我真的相信这本书 100% 适合您的个人资料。

          【讨论】:

          • 嘿,我刚读完你的书!很好地阅读以了解 MVVM 和 WPF,但我认为您扩展第 6 章并创建一个更复杂的应用程序的第二版将非常有用。谢谢!
          • 嘿@Mwspencer,感谢您的反馈!事实上,第 6 章已经因大众需求而扩展,现在从第 129 页到第 160 页,包括一个练习。你有那个版本的还是旧的?无论如何,为想要了解更多内容的人编写一本更高级的 MVVM 书籍可能是个好主意。
          • 我确实有扩展版,但是更高级的书会非常受欢迎。在我看来,您正在归档不需要 6 个月阅读的急需 C# 书籍(又名 Unleashed 系列)。谢谢!
          • 谢谢!我的清单上还有更多内容要写,目前正在准备另一个。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-01
          • 1970-01-01
          • 1970-01-01
          • 2013-06-28
          • 1970-01-01
          相关资源
          最近更新 更多