我的C#.NET团队应该迁移到Windows Presentation Foundation吗?

时间:2008-09-16 20:21:11

标签: .net wpf

我们为商业银行提供基础设施服务(数据检索和存储)和小型智能客户端应用程序(主要是花哨的报告)。我们的团队很大,有40多名合同员工,他们是C#.NET程序员。我们支持50多种我们开发的应用程序和系统。

该小组的一些成员开始制作基于WPFWFWCF的应用程序。鉴于它们是第一个,大多数成员不了解这些技术。他们传达了哪些好处可以克服重新培训团队的成本?

9 个答案:

答案 0 :(得分:23)

我们正在完成一个项目,我和其他4个项目开发了一个相当成功的分布式企业应用程序。我们开始使用Win32,然后在第一次迭代后切换到WPF以满足我们的可用性专家的需求。这是我的经历。

WPF有一些非常非常棒的功能。一般来说,它使真正困难的事情变得微不足道(例如创建显示丰富的演示数据的列表框,例如混合了表格,副本等的图像),但反过来又可以使“在Win32中过去这么容易”痛苦地沮丧。我已经在WPF工作了6个月了,我仍然发现将组合框数据绑定到XML数据提供者是一种可怕的经历。

正如我上面提到的那样,WPF有一些很好的,不那么好的约束力。我喜欢你如何使用XPath绑定到XML文档或内联片段,但我讨厌如果你的绑定是双向的,你怎么只能使用内置的绑定验证(我更加讨厌你怎么能强制内置绑定验证将用户输入传递回对象,即使数据超出某些业务规则的范围。)

WPF有着巨大的学习曲线。它甚至不是曲线 - 它是一堵墙。这是一个艰难的过程。这是一种完全不同的Windows演示方式,对我而言,在我开始觉得有些舒服之前需要大量阅读和播放。这不是世界上最简单的东西,但它允许你做一些非常强大的东西(例如在我们的项目中,我创建了一个表单引擎,使用大约300行XSLT从XML创建完整的XAML表单 - 完成完全绑定和验证)。

总的来说,我非常满意我们选择了XAML,尽管它有学习曲线,这有点错误,以及一些深深的挫折。积极因素远远超过了负面因素,它使我们能够做出一些我认为不可能做到的事情而不会对业绩造成极大的打击。

如果您决定选择WPF的路线,我强烈推荐这两本书:

祝你好运!

答案 1 :(得分:15)

WPF UI比当前的C#替代品更容易设计实现和维护,因此如果您的许多代码库负责处理UI,迁移可能会有益 - 例如,您会发现您的团队将节省时间处理他们的UI层。如果您的大部分代码都是业务逻辑,那么它将无济于事。

答案 2 :(得分:12)

WPF让你做了一些令人惊奇的事情,我喜欢它......但每当开发人员问我是否认为他们应该采用新技术时,我总是觉得有资格获得我的推荐资格。

您的开发人员是否愿意(最好是EAGER)花时间学习有效使用WPF?我从来没有想过要对MFC,Windows Forms,甚至是非托管DirectX这么说,但你可能不希望团队试图在普通开发过程中“接收”WPF。运输产品的周期!

至少有一两个开发人员具有一定的设计敏感性,并且具有最终设计权限的人员对开发问题有一个很好的理解,因此您可以利用WPF功能创建实际上更好的东西,而不仅仅是更多“多彩”,以无偿动画为特色?

您的目标客户群的某些百分比是否在可能不支持您计划的功能的集成图形芯片组上运行 - 或者他们是否仍在运行Windows 2000,这会将客户完全消除?有些人还会问你的客户是否真的关注增强的视觉效果,但是,在20世纪90年代早期经历了内部公司“我们的商业客户并不关心颜色和图片”的辩论时,我知道竞争对手精心设计的解决方案将会让他们关心,真正的问题是条件是否正确,让你能够提供让他们现在关心的东西。

项目是否涉及到地面开发,至少是表示层,以避免尝试挂钩不兼容的传统脚手架的额外复杂性(与Windows窗体的互操作性不是无缝的)?

您的经理可以接受(或分散注意力)在开发人员工作效率方面的重要DROP四到六个月吗?

最后一个问题是由于我喜欢将其视为WPF的“FizzBin”性质,有十种不同的方式来实现任何任务,并且没有明显的理由偏好一种方法来实现另一种方法,并且没有什么指导可以帮助你做出选择。您所做出的任何选择的缺点不仅会在项目的后期很明显,而且几乎可以保证您的项目中的每个开发人员采用不同的方法,从而导致严重的维护问题。最令人沮丧的是当你试图学习框架时,不断惹恼你的不一致。

您可以在我的博客上的条目中找到更多与WPF相关的详细信息:

http://missedmemo.com/blog/2008/09/13/WPFTheFizzBinAPI.aspx

答案 3 :(得分:4)

WPF:

  • 是关于图形的!
  • 是一个独立于分辨率的框架(意思是 - WPF完全采用了矢量图形的概念 - 并且还使位图图形的缩放成为一个没有思想的过程)
  • 硬件加速!!!! WPF图形尽可能通过Direct3D进行硬件加速 - 它不是基于GDI的!
  • 没有Paint()功能 - WPF基于保留的基于图形模式/树的绘图系统。终于来了!
  • 图形化非常动态 - 一切都可以动画化 - 动画内置于框架中。请记住....没有Paint()
  • 非常可定制 - 虽然进入ControlTemplates的细节是复杂的开始。您只需将对象添加到显示树,让WPF担心更新。
  • 文字渲染功能非常丰富。
  • 希望通过使用声明性语言(XAML)来改进设计人员/编码人员的工作流程,以用于图形定义和复杂的GUI设计软件(Expression Blend)。虽然重要的是要意识到任何可以以声明方式完成的事情也可以在代码中完成。 WPF的复杂性已经吓跑了许多设计师,这也是值得商榷的 - 但它已经为编码员提供了一个强大的框架。

WPF:

  • 不是Windows Forms ++ - 这只是一个完全不同的概念
  • 不是Silverlight - Silverlight是WPF的子集。相当轻的子集。
  • 不是MFC - 好的,这应该是显而易见的
  • 使用Windows XP不易分发 - 这是一个耻辱,也许是其最大的失败之一
  • 不是XAML。需要理解这种区别。 XAML是一种可选的声明性语言,可用于WPF应用程序的开发过程。它绝对不是必要的组件,虽然一旦理解,它肯定会改进复杂图形框架的工作流程,设计和重构。

答案 4 :(得分:2)

WPF与Windows Forms截然不同。这意味着为您的团队提供大量培训。

答案 5 :(得分:0)

我认为原始问题中的关键词是“花哨”。如果您的客户真的期望在交付项目中有很多亮点,那么您可能会从切换到WPF中获得一些收获。

答案 6 :(得分:0)

起初我不确定,大多数应用程序看起来都相当滞后(授予,WinForms也不是闪电般快)。这似乎是通过.NET 3.5 SP1修复的,它们集成了许多技术的硬件加速。

集成的动画/故事板/矢量功能非常好,是迈向正确方向的一步。如果掌握了Expression Blend,您将能够快速地对应用程序进行原型设计。在我看来,这些都是明显的好处。

从长远来看,我不认为WinForms和旧技术是一种可持续的选择。​​

还有Adobe Flex,Adobe / Macromedia拥有更强大和“令人兴奋”的GUI解决方案的经验,因为他们有使用Flash的经验。

我希望我们最终不会在台式机上安装10个不同的VM,只是为了运行所有这些不同的框架......

重新:

  

花哨报道

幻想可能是WPF的优势之一......

答案 7 :(得分:0)

WPF是一种非常全新的UI设计方法。唯一的问题是它引入了大量的概念,其中一些只是为了隐藏XAML(XML)的冗长。从设计的architecture astronaut方法来看,它也受到了一些影响,但总的来说我很满意它。它让你以前无法做到的事情成为可以管理的事情。

答案 8 :(得分:0)

WPF是UI方法论当前的“最新技术”。如果人们在学习编写UI(而不是GDI,Win32以及后来相对类似的WinForms)时可以使用它,那么学习它并不需要很长时间。您可以将其想象为切换到Dvorak键盘 - 最困难的部分是改变您对自己认为熟悉的UI设计部分的看法。

那就是说,你至少应该鼓励你的团队成员在业余时间尝试WPF。从一开始就提供资源,可能通过以下方式提供:

  • 有链接到告诉您需要安装什么才能使用WPF的页面 - 如果它没有提到Blend那么我就不相信它了。
  • 在这里查看“入门”问题,因为他们可能会从经验丰富的人那里得到很好的答案。
  • 购买至少一些好书,让人们随意借用。