我的 C# .NET 团队是不是应该迁移到 Windows Presentation Foundation? [关闭]

Posted

技术标签:

【中文标题】我的 C# .NET 团队是不是应该迁移到 Windows Presentation Foundation? [关闭]【英文标题】:Should my C# .NET team migrate to Windows Presentation Foundation? [closed]我的 C# .NET 团队是否应该迁移到 Windows Presentation Foundation? [关闭] 【发布时间】:2008-09-16 20:21:10 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

正如我在上面所说的,WPF 有一些很棒的和不太好的绑定。我喜欢你如何使用XPath 绑定到 XML 文档或内联片段,但我讨厌如果你的绑定是双向的,你只能使用内置的绑定验证(我非常讨厌你不能强制内置绑定验证将用户输入传回对象,即使数据超出某些业务规则的范围)。

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

总体而言,我对我们选择 XAML 感到非常满意,尽管有学习曲线、这一切都有些错误的性质以及一些深刻的挫败感。积极的一面远远超过了消极的一面,它让我们能够做一些我认为不可能的事情,而不会对性能造成巨大的影响。

如果你决定走 WPF 的路线,我强烈推荐这两本书:

Adam Nathan 所著的 Windows Presentation Foundation Unleashed 是一个很棒的介绍,全彩!它读起来像一个博客,并为您提供了一个很棒的介绍 - http://www.amazon.ca/Windows-Presentation-Foundation-Unleashed-WPF/dp/0672328917/ref=pd_ys_iyr3

编程 WPF:使用 Windows Presentation Foundation 构建 Windows Ui,作者:Chris Sells。 WPF Unleashed 的更多细节和一本好书 - http://www.amazon.co.uk/Programming-WPF-Building-Presentation-Foundation/dp/0596510373

祝你好运!

【讨论】:

我完全同意学习“墙”。但是,我不同意 cmets 的观点,即 WPF 中的某些事情本质上是困难的。你有这种感觉的东西只是你仍然在“墙的另一边”的东西。【参考方案2】:

与当前的 C# 替代方案相比,WPF UI 更易于设计实现和维护,因此,如果您的很多代码库都负责处理 UI,那么迁移可能会带来好处——例如,您会发现您的团队将节省时间处理他们的 UI 层。如果您的大部分代码都是业务逻辑,那么它不会有太大帮助。

【讨论】:

我认为根本不是这样。在 WinForms 中设计和实现 simple UI 似乎比 WPF 更容易,而且我是根据几个月的 WPF 经验说的。例外情况是,当您需要 WinForms 无法开箱即用的东西时,您需要做更多的工作才能得到它。 @PeterAllenWebb - 这对我和 VS2010 来说不是真的。我有多年的 WinForms 经验,在 WPF 学习过程中,我发现无论复杂程度如何,我都可以更快地完成 WPF UI。这主要是因为在 XAML 中以声明方式编写 UI 代码并将其绑定到 C# 视图模型很容易,这是 ASP.Net 的岁月让我快速完成的事情。【参考方案3】:

WPF 使您能够做一些令人惊奇的事情,我喜欢它......但每当开发人员问我是否认为他们应该转向新技术时,我总是觉得有义务证明我的建议。

您的开发人员是否愿意(最好是 EAGER)花时间学习有效地使用 WPF?我从没想过要对 MFC、Windows 窗体甚至非托管 DirectX 这么说,但您可能不希望团队在正常开发过程中尝试“拿起”WPF。运输产品的周期!

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

您的目标客户群中是否有一部分运行在可能不支持您计划的功能的集成图形芯片组上——或者他们仍在运行 Windows 2000,这将完全排除他们作为客户的身份?有些人还会问您的客户是否真的关心增强的视觉效果,但是在经历了 1990 年代初期公司内部“我们的业务客户不关心颜色和图片”的辩论之后,我知道您的竞争对手精心设计的解决方案会让他们关心,真正的问题是条件是否合适,使您能够提供让他们现在关心的东西。

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

您的经理能否接受(或分心)开发人员生产力在四到六个月内的显着下降?

最后一个问题是由于我喜欢将 WPF 视为“FizzBin”性质,有十种不同的方法来实现任何任务,没有明显的理由偏爱一种方法而不是另一种方法,几乎​​没有可提供帮助的指导你做出选择。不仅您所做的任何选择的缺点只会在项目的后期才变得清晰,而且您几乎可以保证项目中的每个开发人员都采用不同的方法,从而导致严重的维护问题。最令人沮丧的是,当您尝试学习该框架时,经常会遇到不一致的问题。

您可以在我的博客上的一篇文章中找到更深入的 WPF 相关信息:

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

【讨论】:

【参考方案4】:

WPF:

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

WPF:

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

【讨论】:

【参考方案5】:

WPF 与 Windows 窗体完全不同。这意味着对您的团队进行大量培训。

【讨论】:

【参考方案6】:

我认为您最初问题的关键词是“花哨”。如果您的客户真的期望交付物有很多亮点,那么您可能确实从切换到 WPF 中获得了一些好处。

【讨论】:

【参考方案7】:

一开始我并不确定,大多数应用程序似乎都非常滞后(当然,WinForms 也不是闪电般快速)。这似乎已在 .NET 3.5 SP1 中得到解决,其中集成了多种技术的硬件加速。

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

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

还有 Adob​​e Flex,Adobe/Macromedia 由于他们在 Flash 方面的经验而在更强大和“令人兴奋”的 GUI 解决方案方面拥有经验。

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

回复:

花哨的报道

花哨可能是 WPF 的优势之一...

【讨论】:

【参考方案8】:

WPF 是一种非常新颖的 UI 设计方法。唯一的问题是它引入了大量的概念,其中一些只是为了隐藏 XAML (XML) 的冗长性。它也受到architecture astronaut 设计方法的影响,但总的来说我对它非常满意。它将您以前不会说的事情变成可以做的事情。

【讨论】:

【参考方案9】:

WPF 是当前 UI 方法中的“最先进技术”。如果它在人们学习编写 UI 时可用(而不是 GDI、Win32 和后来的相对相似的 WinForms),那么学习它不会花很长时间。您可能会将其想象为切换到 Dvorak 键盘 - 最困难的部分是改变您对您认为自己熟悉的 UI 设计部分的思考。

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

有指向页面的链接,说明您需要安装什么才能使用 WPF - 如果它没有提到 Blend,那么我不会相信它。 请在此处查看“入门”问题,因为他们可能会从有经验的人那里得到很好的答案。 至少买几本好书,如果他们愿意,可以让人们借阅。

【讨论】:

以上是关于我的 C# .NET 团队是不是应该迁移到 Windows Presentation Foundation? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

为啥将 VB.NET 代码迁移到 C# 时,for 循环的行为会有所不同?

在win7系统下开发的C# winform项目 打包后 在windows2003系统下无法打开,总是爆出如图所示

C# (.NET) 的无头浏览器? [关闭]

引用程序集或 dll 是不是应该复制到部署目录中?

将用户从 Firebase 迁移到 ASP.NET

将访问权限迁移到 ASP.NET