ASP.Net还是WPF(C#)?

52

我们团队对此有分歧,我想获取一些第三方的意见。

我们正在构建一个应用程序,无法决定是否要使用 WPF 桌面应用程序与 WCF 服务器或使用 ASP.Net Web 应用程序和 jQuery。我想在这里提出问题,并附上一些规格,看看使用任何一方的利弊如何。我有自己的偏爱,并且认为自己有偏见。

理想情况下,我们希望尽快建立软件的初始版本,然后放慢速度,花时间建立我们稍后想要的其他功能/组件。最重要的是,我们希望软件运行快速。用户整天浏览记录,加载记录或刷新屏幕延迟会影响他们的生产力。

应用程序详细信息:

  • 我估计初始版本大约有100个不同的屏幕,计划在初始发布后添加许多其他屏幕。
  • 我们正在寻求使用双向通信来进行提醒和事件系统
  • 目前必须支持约100个用户,尽管我们被告知允许增长到500个用户
  • 我们有多个位置

需要考虑的项目(在某些情况下可能不是初始版本,但在将来的发布中需要考虑):

  • 在初始发布后留出添加其他组件的空间(这比初始应用程序要复杂...)
  • 键盘导航
  • 性能是必须的
  • 生产速度到初始版本
  • 低维护开销
  • 未来支持
  • 软电话/扫描仪集成

我们的开发人员:

  • 我们有1名程序员已经学习了几个月的 WPF,并建议我们为此使用 WPF。
  • 我们有第二位程序员熟悉 ASP.Net,并可能在未来帮助项目,尽管在初始发布之前,他不会花太多时间在其上,因为他的时间都花在维护我们当前的软件上。
  • 还有我,我使用过两者,并且对两种技术都很熟悉。
  • 我们有一家外部公司进行项目管理,他们是一个 ASP.Net 公司。
  • 我们计划聘请1-2名其他人,但是首先我们需要知道我们要走什么方向。
  • 环境:

    • 普通用户使用Windows 2003服务器和终端服务。他们使用WYSE瘦客户端通过RDP连接进行连接。管理员工具有自己的XP或更高版本PC。用户被允许指定其自己的分辨率,尽管他们受限于使用IE作为Web浏览器。
    • 其他地点通过MPLS连接到我们的网络

    基于此,您会选择什么,为什么呢?

    我特别想听听那些有ASP.Net和WPF经验的开发人员的意见。


    2
    这将是什么?类似于CRM系统吗?您可能希望寻找现有产品并在其基础上构建,而不是从头开始构建整个系统。 - TeaDrivenDev
    3
    我们已经查看了现有的产品,但没有一个符合我们业务需求。我们的想法是构建一个结合我们所见到的最佳元素并融合我们自己想法的东西。 - Rachel
    @cwap:是的,它将部署在公司Intranet上。如果我们选择ASP.Net,更新显然很容易;如果我们选择WPF,我们将构建一个自动更新器,在连接到WCF服务器时运行。 - Rachel
    @Rachel - 首先让你知道,我开始学习WPF,并且也在阅读你的博客,这是一个很好的信息来源。你是否考虑过将其制作成完整的教程呢? 另外,关于这篇文章 - 如果您想制作一个全球分发的应用程序,WPF仍然是一个好选择吗?还是必须使用ASP.NET? - CodeMonkey
    @YonatanNir 我不认为我有时间制作完整的教程,但如果我有大量空闲时间,我会考虑的 :) 至于WPF是否可以在全球范围内分发,只要你知道你的受众,我认为没有问题。我认为WPF只能在Windows上运行,并且我真的建议使用 .Net Framework 4.0+,而并非每个人都在他们的计算机上拥有它。此外,根据应用程序的功能,可能会存在安全/信任问题。WPF是一种桌面技术,可以访问本地文件系统,而ASP.Net是一种具有有限访问权限的Web技术。 - Rachel
    显示剩余5条评论
    7个回答

    40

    选择WPF的原因:

    • 比ASP.NET和jQuery开发更快、更容易
    • 更容易实现数据的快速增量加载
    • 更容易实现常用数据的客户端缓存(对于远程办事处很重要)
    • 从服务器传输数据更高效(可以使用Web浏览器无法使用的高级WCF功能)
    • 键盘导航更好,因为您可以轻松地定义快捷键等,而不受浏览器的限制
    • 使用MVVM模式维护开销“更小得多”
    • 软电话集成简单

    选择ASP.NET和jQuery的原因:

    • 我没有看到任何原因

    在您的情况下,我绝对会选择WPF。


    8
    选择使用WPF的原因:•比ASP.NET和jQuery开发速度更快、更容易。但是,您可能正在使用与我不同的WPF版本。只需以输入验证为例,其中一个字段依赖于另一个字段,就可以看出在WPF中实现这一点有多困难了。 - Daniel
    2
    我经常进行这种输入验证。你觉得它有什么困难吗?更重要的是: 你使用 WPF 和 ASP.NET 已经多长时间了,你在 WPF 开发中是否使用 MVVM?WPF 只需要更少的代码和更少的调试,因此更快,更容易开发。 - Ray Burns
    2
    EF + MVC 还具有自动验证功能。无论如何,对我来说,在 Web 环境中开发这个项目会更容易,因为我熟悉它,而我不熟悉 WPF。所以第一点是有争议的。 - Artemiy
    1
    @Lex:看起来你不知道WPF可以在Web浏览器中工作。FYI,你可以像Silverlight一样在网页中运行WPF应用程序,无论是全屏(不需要HTML)还是在网页的某个部分。唯一的要求是客户端必须安装了.NET Framework的Windows系统。与服务器的通信可以通过WCF、Web服务、REST或其他许多方式进行。 - Ray Burns
    2
    你错了。在Windows上,我个人使用过IE、Firefox、Chrome和Safari中的WPF。Silverlight带来的是跨平台能力——能够在Mac、Linux、WinPho7等平台上运行。但这样做的代价是,Silverlight仍然缺少一些WPF最好的功能,比如MarkupExtension。 - Ray Burns
    显示剩余7条评论

    9

    为什么不考虑混合解决方案 - Silverlight

    Silverlight提供了大部分WPF的优点和状态性(几乎完全相同的XAML和代码),同时还具备ASP.NET的部署特性。

    许多人认为Silverlight是继ASP.NET/AJAX之后的下一步发展,它肯定会为您的情况带来WPF相关的所有优势。


    2
    @Rachel:我使用WPF构建类似的业务应用程序已经一年多了,然后花费了最近两个月时间构建Silverlight业务应用程序,我同意对于给定的场景,出于你所述的原因,WPF是优于Silverlight的选择。 - Mike Schenk
    1
    Silverlight是WPF的强化版。 1)SL是Web技术,因此没有部署/更新问题。 2)SL是演示框架,因此架构本质上是多层的。 3)SL已经拥有丰富的控件堆栈(商业和免费)。 4)SL比WPF更跨平台。 5)SL几乎使用与WPF相同的XAML。 6)SL具有Ria服务和Wcf数据服务以提高Web实体访问。 7)Softphone / Scanner可以通过COM-interop实现。因此,如果您需要仅限Windows的解决方案,我个人会选择WinForms,因为其控件基础更优越。如果您需要Web,则应选择SL。 - Lex Lavnikov
    2
    @Lex:你的评论显示你对WPF的理解存在一些漏洞:1. WPF支持Web部署,对于最终用户来说与Silverlight无异,2. WPF比Silverlight更好地支持多层,3. WPF拥有更大的控件堆栈,5. WPF具有更多的XAML功能,6. WPF还有更多,7. WPF具有P/Invoke、完整的 COM互操作性、HwndSource等,因此软电话/扫描仪互操作性可能会更容易(同时COM互操作性消除了Silverlight的唯一优势)。底线:Silverlight很棒,但除了多平台能力外,WPF在每个类别中仍然胜出。 - Ray Burns
    1
    @Ray:抱歉,这里没有间隙。我在SL和WPF上都有过工作经验。1)根据我的经验,WPF有xbap(仅限IE,无用,没有OOB),WPF / WinForms有ClickOnce可用,但对于OOB和浏览器Web应用程序而言,SL xap文件是更简单、更清洁的部署解决方案。因此,不,SL具有更好的部署方案。 - Lex Lavnikov
    2
    @Lex:1)XBAP 可以在 IE、Firefox 和 Chrome 上运行。显然,WPF 具有离线能力(!)。如果正确设置,离线转换可以与 Silverlight 完全相同。2&6)一个这样的例子是我的 EDF 框架,它需要在 Silverlight 下进行一堆丑陋的工作,因为 Silverlight 缺乏高级绑定、DependencyObject 限制和通信限制。Silverlight 真的很棒,但只要不需要跨平台,WPF 就更好了。 - Ray Burns
    显示剩余7条评论

    9
    首先,我会坐下来编写业务需求和规格说明。使用的技术并不重要——适当的规划将比技术选择更影响项目时间表,特别是对于内部定制应用程序而言。
    就开发而言,我会根据需求布置后端功能。我会实际在WCF中实现后端,无论客户端技术如何——这样,如果需要,您可以同时使用最佳方案(例如,对于电话集成,您可以编写一个独立的WPF应用程序)。ASP.NET与jQuery可以轻松地使用WCF服务(JSON或XML版本)与桌面客户端一起使用。
    至于客户端表单的开发,这取决于开发人员的经验和您的未来计划。我不会在此处讨论开发Web软件的优缺点——过去10年有大量关于云/基于Web的软件的文章(例如Salesforce)。我宁愿集中精力于可交付成果——您的团队今天和未来最舒适的方式是什么。从开发的角度来看,WPF和Web开发之间存在巨大差异,并且需要完全不同的经验。

    我认为,几乎总是应该有一个服务层,不同的接口可以连接到它,这样你就可以将数据/逻辑与呈现和交互分开。 - Homde

    5

    毫无疑问,WPF是最好的选择。我同意@Ray Burns所说的一切。

    因为:

    • 您将获得更丰富、更流畅、更快的应用程序。
    • 构建起来会更容易1
    • 软电话/扫描仪(即硬件)集成需要浏览器插件等,这可能会在基于浏览器的应用程序中造成噩梦。
    • 键盘导航在本地应用程序中仍然更好。
    • 使用WPF应用程序更容易进行输入法编辑器维护。

    一定要使用WCF通过The Entity Framework提供后端支持,请参见分层架构中的The Entity Framework。在本地应用程序中,您可以通过内联调用来更好地与后端进行集成,而不需要回调或ajax。我曾经为WPF构建过组件,这些组件通过EF与业务逻辑链接,为简单的验证等提供感知控件。只需将客户名称字段拖放到表单上,它就能正常工作,效果非常好。

    要添加其他组件,您需要使用适当的、经过深思熟虑的插件架构进行构建。这在两个环境中都是相同的。我在日记中记录了一些关于此的想法,标题为设计应用程序的插件架构
    构建WPF应用程序时,您将使用一种语言(例如C#)+标记(XAML)进行编写。在构建asp.net时,您将得到两种语言+标记,因为您总是需要编写一些Javascript。
    因此,根据您的要求,必须是WPF/WCF(EF)。基于Web的应用程序将需要更多的工作量、更复杂,并且不会像WPF那样好用。
    大约12个月前,我很幸运地获得了自由选择新应用程序技术的机会。我花了近一个月的时间评估了所有选项,并得出了结论,即必须是C#、WPF、Entity Framework。编写应用程序后,我可以确认这是正确的选择...

    1. 即使你的程序员需要先学习WPF,它仍然会更容易。 WPF经过深思熟虑,非常出色和可爱。非常可爱。 它只是正确地工作。


    1
    @插件架构,对于未来的访问者:MEF也很容易使用和学习。 - Zack

    4

    你好
    我认为问题在于Windows应用程序还是Web应用程序(WPF适用于Win-app,ASP适用于Web-app),哪一个更适合你和你的项目?在这种情况下,你的平台是网络,你的程序必须在网络上运行。因此,对于这种用途,Web-app更好,但存在很多决策难题。网络平台具有巨大的挑战(根据我的个人经验)。

    使用asp.net处理Web-app几乎是困难的。你必须尝试处理许多事情(请求时间、会话管理,甚至与WPF相比较的差劣UI等)。请记住,这不像简单的网站那样容易。

    但是,在本地网络环境下,win-app非常好(MPLS几乎相同)。绝对开发win-app比web-app更容易(“至少有一些用户擅长于网络程序开发”)。对于这种情况,WPF有许多好东西(UI、命令等),但也有许多具有挑战性的点(如多线程和缺乏该领域的专家开发人员)。我更喜欢WPF而不是ASP,但决定权在你手中

    而且,关于Silverlight的好处是明显的,但如果你想使用它,你必须看看棱镜框架:http://compositewpf.codeplex.com/。我最近分别使用ASP和Silverlight(棱镜框架)开发了一个项目。开发Silverlight版本比asp.net版本更难,并且需要更多的时间。但最终SL-ver看起来很棒,没有什么可以替代它!

    Burns指出了关于WPF的好问题。还要考虑Artemiy's的帖子。对于两者来说,你的环境条件是相同的。WPF / ASP可以与扫描仪和软电话一起使用因为两者的基础都在C#和.NET库上。最后,无论你的决定是什么,你都必须至少雇用高级开发人员来开发一个面向网络平台的业务应用程序。


    1
    开发asp.net版本太难了,需要更多的时间,因为涉及到ajax、jquery、javascript、浏览器微调等。而开发Silverlight版本则简单得多,因为有C#、.NET库、XAML、共享代码(服务器和客户端之间)以及无与伦比的调试功能。 - Lex Lavnikov
    @Lex:完全同意。+1 提到调试故事。 - Ray Burns
    @Lex,我的意思是使用棱镜模式开发Silverlight,而不是简单的Silverlight。你知道Presenter、Interface、Controller、Service等等,这些都让开发和调试变得困难。 - Rev
    1
    你最好不要使用Prism。有很多更简单的框架可供选择,比如Caliburn.Micro或MVVM light。 - Lex Lavnikov

    3

    你的应用是桌面应用还是网页应用。

    如果是桌面应用,WPF 是最好的选择。如果是基于网页的应用,ASP.NET 是最好的选择。

    不要一开始就追求快速开发,这种方式往往效果不佳,会导致部署混乱。花时间,涵盖所有步骤(业务需求、系统设计、程序设计、编码、测试和反复测试、部署)。


    这是我的问题 - “我们正在构建一个应用程序,无法决定是否要使用带有WCF服务器的.Net WPF桌面应用程序,还是使用jQuery的ASP.Net Web应用程序”。谢谢 :) - Rachel

    2
    ASP.NET相关要点如下:
    ASP.NET开发人员的数量比WPF开发人员的数量要多得多,这意味着您可能更容易找到合格的ASP.NET开发人员。
    ASP.NET可能更具未来性,因为WPF可能会有大幅度的变化并且难以移植到后续版本中。此外,需要注意的是,微软的重点似乎在Silverlight上,因此可能会在未来对WPF进行整合,使其变得过时。
    成熟的ASP.NET生态系统可以提供更多的现成解决方案来解决问题。
    通过多个位置,您可能能够跳过一些层级并直接进入网站?

    1
    我同意关于开发人员的观点,但我不知道在这个经济环境中它有多重要。我不同意未来的可靠性。ASP.NET变得古老、脆弱和臃肿。WPF正在以Silverlight的形式移出设备。迟早我们会看到WPF/Silverlight针对HTML5,然后ASP.NET将成为历史。 - Ray Burns
    只是想更新一下这条评论,因为它涉及到预测未来。ASP.NET现在正在被ASP.NET Core所取代,以使其能够在所有平台上运行并减少臃肿。Silverlight的开发已经停止,但WPF再次得到更新,但它们专注于Windows桌面。 - Adam

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接