自定义MVVM实现VS. PRISM

akj*_*shi 25 .net wpf frameworks prism mvvm

这个问题的灵感来自这个封闭的问题:

Prism实际上为开发人员提供了什么?它值得吗?

我已经在企业应用程序中实现了自己的自定义MVVM实现.我有兴趣知道:

  • 我为什么要学习PRISM(特别是PRISM,而不是其他MVVM框架)?
  • PRISM优于自定义MVVM实现和
  • 学习PRISM是否值得投资?

我希望这个问题不是主观的,每个人请不要参与:)

Dom*_*nic 25

与许多为您执行常见任务的框架一样,您将获得:

  1. 更多眼球测试:不仅仅是你自己.这(希望)包括单元测试,您在构建自己的框架时可能会或可能不会这样做.
  2. 其他开发人员更具可读性:没有其他人具有您的自定义MVVM框架的经验.但是,如果另一个开发人员加入您的项目,或加入您的团队,或加入您的公司,他们可以直接进入Prism代码.
  3. 更好的文档:同样,任何新加入的人都可能需要通过手动收集大脑和团队中任何其他用户的集体知识,并查看源代码来学习绳索.第三方框架有自己的文档,互联网上有更多博客文章.
  4. 更好的社区:你可以在StackOverflow上提问"如何用棱镜做X?" 你不能用自定义框架问这个问题.
  5. 可能更有能力:通过需要为您/您的团队提供更多用户,将增加更多功能.如果你需要做一些你以前从未做过的与MVVM相关的事情,那么它的支持很可能不会内置在你自己的MVVM框架中.但它可能在Prism中.
  6. 更好的结构:假设你想做与MVVM相关的事情,但它不是在Prism中.很有可能,这是有充分理由的!如果某个东西不在一个(合理成熟的)框架中,而是在一个给定的域中工作,那就表明你想要做的是一种不自然或笨拙的方法来解决问题.使用您自己的框架,很容易说"哦,我会添加该功能",然后6个月后意识到您犯了一个大错误,因为这个新功能使您的代码很难遵循或最终成为一个矢量批量的错误或诸如此类的.
  7. 一个简历项目:对于雇用"实现和使用自定义MVVM框架"的人,我会有一种复杂的感觉.虽然这可能意味着他们很聪明,但它也可能表明可怕的"没有建立在这里的综合症".另一方面,将"Microsoft Prism MVVM Framework"放在一个巨大的技术列表中可能会很好,但不是一个哇哇.两个世界中最好的将是一个更长的要点,沿着"对MVVM模式的深刻理解,通过在切换到MVVM Prism之前首先实现用于学习目的的玩具MVVM框架来实现".是的,这三者之间的差异不会影响或破坏你的简历,并且非建筑综合症是一种有希望在面试中出现的东西,但是值得记住,特别是如果你正在申请对于一个获得足够简历的地方,他们可以抛弃任何让他们稍微感到不安的东西.

  • 很好的答案..但是对于7:我认为你可以通过实现你自己的MVVM框架来减少代码和精神负担,这个框架可以完全满足您的需求,而不是产生PRISM成本.如果你看起来在MVVM-Light:它非常受欢迎,因为它捕获了MVVM模式中最简单的构建块,而不必像PRISM一样了解怪物堆栈.简单地说:使用Prism,你可以逃脱300 LOC框架,做你想要的东西是不值得的. (8认同)
  • 但我当然不反对Prism ..我通常倾向于使用Caliburn.Micro ..但有些项目可以轻松逃脱2-3个基类(如MVVM光中的那些),也许1-2反思为基础的东西,让你度过一天..如果你确实达到了一个完整的框架确实有意义的点,你应该能够重构.. (3认同)
  • 我主要是评论你的观点,因为Prism确实是一个怪物..我有几个项目,我不得不减少堆栈,所以新的团队成员和其他人帮助他们可以加快速度,如果他们没有先前的技术知识.而且由于整个堆栈(WPF本身已经相当复杂)非常繁重,我喜欢拥有对当前项目结构有意义的逻辑构建块,而不是让我的人员google"在棱镜v4中做XYZ的最佳方式" (2认同)

Abd*_*men 8

PRISM对您来说很有趣,因为它不仅仅是一个MVVM框架.是的,它的一部分实际上可以被认为是一个MVVM框架(其中NotificationObject,EventAggregator和Command对象都是它的例子),但它提供了更多.

它允许您创建多个松散耦合 "模块"的复合应用程序.它具有非常灵活和可扩展的导航框架(区域导航),提供与IoC容器(特别是Unity和MEF)的集成以及许多其他功能.

除此之外,文档(包括电子书)非常好,并附带了大量示例和快速入门.顺便说一句,我认为值得投资,这不应该太多.

希望这可以帮助 :)