代码之家  ›  专栏  ›  技术社区  ›  deanvmc

MVVM是否正在终止Silverlight开发?[关闭]

  •  4
  • deanvmc  · 技术社区  · 14 年前

    这是一个我头脑中反复思考了一段时间的问题。前几天晚上我和一个家伙聊过,他告诉我他不会使用导航框架,因为他不知道如何使用MVVM。尽管我试图解释模式应该用一小撮盐吃,他还是不听。

    我的观点是,模式在解决某些问题时是很好的。有时,只有模式的一部分解决了一个特定的问题,而其他部分会导致不同的问题。任何开发人员的目标都是使用模式专有技术和预见性的组合来构建一个可靠的应用程序。

    我觉得MVVM正在成为一种模式来统治他们。由于.NET不直接支持它,因此需要一些花哨的业务来使其工作。我觉得人们错过了模式的要点,即松散耦合、可测试的代码,而不是跳过去,错过了试图跟随MVVM走向正轨的伟大经验。

    MVVM非常棒,但我希望它能为新手提供警告或免责声明,因为我担心人们会因为害怕被MVVM棒击中而避开Silverlight开发。

    编辑: 我可以添加为一个编辑吗,我使用并同意MVVM作为一个模式,我知道它在我的项目中何时是可行的和不可行的。我的问题是它所具有的包容性,好像它必须被用作发展的一部分。它被用作一个整体特征,而不是一个模式。

    编辑2:感谢迄今为止所有的评论,有一个问题是我一直没有想到的。是指为GUI/RIA开发引入了更丰富、更高级的框架,这表明这一代的RAD开发存在弱点。也就是说,这些框架是否缺少代码设计和模式知识?我曾经要求一本关于C(在Pro C&the.NET框架流行之前)的书,有人告诉我为什么要知道C减去WinForms/asp。

    当然,有很多关于这些主题的书籍/kb,但是除了超级明星和优秀的程序员之外,人们还在使用它们吗?

    7 回复  |  直到 14 年前
        1
  •  8
  •   Ana Betts    14 年前

    所以,我认为很多新的MVVM开发人员都忘记了这一点——模式是有帮助的 而不是相反。以这种方式构建软件 倾向于 为了让你的生活更轻松,当你的项目变得更大时,但如果它完全阻碍了你完成一项特定任务,退一步问,“在这个特定的场景中,MVVM是否在帮助我?”如果它能让你的生活更轻松,你就可以时不时地“作弊”。

        2
  •  5
  •   babernethy    14 年前

    实际上,我已经非常有效地将MVVM用于使用命令和消息传递的WindowsPhone7框架的导航应用程序。但是,如果有人告诉您,您可以使用Silverlight的每一个功能,而不向代码后面添加一些代码,那么他们就是在愚弄自己。在有帮助和有意义的地方使用模式,当某个特定功能需要自定义时,使用“关闭模式”。

        3
  •  4
  •   devuxer    14 年前

    假设你的问题也适用于wpf,我想知道在你尝试mvvvm之前,问题是否不仅仅是wpf/silverlight的巨大学习曲线。想一想WPF中需要学习的所有新东西(我假设是Silverlight):XAML、依赖属性、附加属性、路由事件、路由命令、静态资源、动态资源、样式、数据模板、控制模板、数据绑定等。然后考虑到Microsoft使用不完整的一套,至少是WPF,皮肤很粗糙的控制,你会有一个让人沮丧的配方,以及不可避免的感觉,那就是你正在处理一项“还没有准备好迎接黄金时间”的技术。我的意思是,在WPF工具箱出现之前,甚至没有一个合适的数据报控件。

    一旦你了解了所有这些,MVVM是另一个障碍,但我不认为它是人们跳上WPF/Silverlight的主要障碍。也就是说,如果微软能像支持ASP.NET MVC那样支持它,那就太好了。现在,您必须下载并使用第三方工具,如 MVVM Foundation MVVM Toolkit (顺便说一句,它有很多重叠,应该合并成一个单独的项目)。

    因此,我同意你的观点,但我认为MVVM所面临的大部分挑战可能是由于缺乏微软的支持,以及WPF/Silverlight固有的复杂性,而不是MVVM模式本身的任何缺陷。

        4
  •  3
  •   Jeremy Likness    14 年前

    顺便说一下,答案很好。讨论得好,而且很重要。毫无疑问,学习Silverlight对新开发人员来说是一种威胁,MVVM框架无疑会使之复杂化。

    但是,我同意,不理解这一点的人并不是在挖苦框架。我仍然有开发人员告诉我,控制/依赖注入的反转太令人困惑,无法学习,但这会导致这些无效模式吗?事实证明,“现场”软件依赖于这些概念,这告诉我,即使一开始很难掌握或理解这些概念,它们也很合理。

    再说一次,当我开始学习外国语的时候,学习起来很困难,但一旦我努力学习,现在我就可以轻松地说出来了,我想知道为什么一开始就这么难。

    我想最让我害怕的趋势是,这个概念认为,由于某些原因,复杂的企业应用程序应该很容易地由初学者开发,他们要么不能,要么不会掌握复杂的概念。归根结底就是这样。你没有医生说,“帮助,让这个脑部手术更容易让任何人都能做。”这是专门的。构建优秀的软件也是专门化的,这就是为什么咨询师要为他们的服务支付很高的报酬:这是他们在理解正确的方法来设计和开发解决方案时所提供的价值。

    如果你正在制作小行星游戏、奇幻游戏、媒体网站、YouTube盗版等,那么你可能不需要MVVM,而且它太过杀伤力了。如果你正在用一些表格和图表构建一个小站点,那么就以你觉得舒服的方式构建它,并完成它。

    如果您正在构建一个由多个动态模块组成的大型、复杂的站点,移动数千或数百万条记录,并且需要扩展到大量并发用户,那么您就不能指望设计会在浏览几页书或浏览几个站点后突然出现。像这样的软件很复杂,有很多移动部件,需要对体系结构有一个牢固的理解。

    让我吃惊的是,人们可能正在构建这些更复杂的应用程序,但他们仍然无法构建这些更复杂的应用程序。团队中是否有经验丰富的人?您是否有一个架构师来消除您可以使用的框架?

    我的意思是,实际上,这个例子告诉我问题不是MVVM,而是开发人员。”因为MVVM而避免导航?“真的?MVVM和它有什么关系?写下导航片段,让视图模型活在页面中。为什么我的导航必须从视图模型驱动?

    来吧。如果它如此复杂,我认为它与模式没有任何关系,所有与开发人员有关的事情只是不理解开发。别怪这种模式。也许他们需要坚持使用更简单的应用程序。在我的经验中,那些逐渐了解模式的人对软件的理解足够好,他们知道何时何时不使用模式。

    我知道有很多运动可以简化它,让它对“普通消费者”来说更简单,但我认为这就像是在说,“微积分是找出曲线下面积的错误方法,因为它太难学了。”虽然MVVM没有微积分那么复杂,但构建复杂的软件是一项复杂的努力,我认为你永远不会去做。把它简化或归结为一个简单的公式(你也不应该这样做)。如果你与MVVM斗争,请不要使用它-找一些简单和容易的东西。如果你的项目足够复杂,以至于你还没有掌握它,请雇佣一个这样做的人,让他们找出它,并向他们学习。

    不,我不希望微软告诉我要使用什么模式,我也不认为这是他们的责任。我是一名专业人士,投入时间学习和了解我正在建设的东西是我肩负的责任,因此我可以为客户构建最好的方式。微软不一定知道我的客户需要什么,所以他们怎么可能告诉我要使用什么模式?像Prism这样的项目之所以伟大,是因为它们是一个折衷方案:它们提供指导,并共享如何完成某项工作的“最佳实践”,而不必强制开发人员执行。

        5
  •  2
  •   vidalsasoon    14 年前

    我正在使用MVVM来安装Windows Phone 7应用程序。我真的很喜欢这个想法,但是有太多的黑客、语言障碍和第三方工具需要运行它。

    Silverlight的每一个版本都在改善,但我仍然认为这项技术是“前沿技术”。

        6
  •  1
  •   Serapth    14 年前

    Why can't you?

    不,MVVM只是许多模式中的一种,坦率地说,甚至不是最流行的模式。影响Silverlight开发的是a)flash b)而不是flash c)以微软为中心d)学习曲线。

    另外,WPF似乎并没有真正抓住这个事实也没有多大帮助。

        7
  •  1
  •   PL.    14 年前

    有人无法确定如何将导航框架与MVVM一起使用=>有人不使用导航框架=>MVVM正在杀死导航框架=>MVVM正在杀死Silverlight开发。

    你能说这条推理链没有什么缺陷吗?