选择正确的.NET架构.WCF?WPF/Forms,ASP.NET(MVC)?

Tom*_*sen 10 .net architecture wpf wcf

我的情况是我必须从底部设计并实现一个相当大的系统.我有一些(实际上很多)关于架构的问题,我希望你的评论和想法.

我不希望我在这里写得太多,但我想让大家知道系统是什么.

有关应用程序的快速信息,如果您愿意,请阅读:我无法分享有关该项目的更多细节,但基本上它是一个系统,我们为客户提供管理其用户的服务.我们有一条热线,用户拨打电话,我们的热线使用(Windows)应用程序(内联网)来管理用户的数据等.客户还有一个Web应用程序,他们可以在其中查看报告,有关其业务和用户的信息,以及修改数据的能力.修改数据不仅仅是地址等用户数据,还包括用户拥有的产品/服务的信息,这些信息可能很复杂.

这些应用程序将构建在Microsoft .NET Framework 4上,并带有MS SQL Server 2008数据库.将有一些应用程序必须访问此数据库,例如:

  • 内联网应用(由我们和我们的热线使用)
  • 客户Web应用程序类型1
  • 客户Web应用程序类型2
  • 客户Web应用程序类型n不同的应用程
  • ...

现在我的大问题是我应该为这样一个系统使用哪些.NET部件.对于"后端",我考虑过使用Windows Communication Foundation: 可能的WCF解决方案 WCF会是一个不错的选择吗?

Intranet应用程序将是一个必须编辑数据库中的大量记录的应用程序.必须使用键盘轻松导航(快速使用).有一个功能,如"找到客户,找到,查找,选择此并更新".开发此应用程序的最佳选择是什么?它是WPF还是旧的Windows窗体?我不需要像WPF那样的所有花哨的图形功能,但是应用程序必须看起来不错(可能类似于新的Visual Studio/Office工具).

对于网页也存在同样的问题.他们有很多相同的工作要做,但没有内网应用程序那么多的功能,而且数据量不同(更少).

这是我现在的问题.我希望能够进行讨论,这将使我看到其中一些技术,帮助我决定架构.

我想事先表示感谢,并且让大家都知道,任何想法都会受到高度赞赏.


编辑1:似乎很多人都同意我们应该使用WCF.在数据层中引入ORM映射器和使用WCF的服务层时,必然会出现性能损失?你对此有何评论?

另一个不断涌现的问题是我们如何处理身份验证和角色.Intranet应用程序具有"主"访问权限(没有限制).但是,当客户从Web应用程序检索有关其用户的信息时,返回的内容取决于他们的"服务级别"以及与客户相关的一些其他参数.处理这个问题的最佳方法是什么?有任何模式/最佳实践吗?

Ray*_*rns 3

桌面UI技术

WPF 非常强大,毫无疑问是您所描述的应用程序类型的最佳选择。如果您的团队在几个月的学习曲线上没有 WPF 经验,但提高生产力和可维护性的长期好处使其非常值得。您可能会考虑除 WPF 之外的其他技术的唯一原因是,您的截止日期很紧,并且您的团队已经非常了解其他一些技术。即使在这种情况下,我也会考虑并行开发 WPF 版本,并将其他版本视为原型。

有些人使用 Silverlight 而不是 WPF 进行桌面开发,其理论是他们应该使用一种技术而不是两种技术。我不同意这个论点:这两种技术非常相似,技能和代码传输得非常好,WPF 目前在 Silverlight 中缺少许多非常有用的功能,并且随着 Silverlight 获得这些功能,它倾向于复制 WPF 的优点。因此,从长远来看,在开发 WPF 应用程序时所花费的任何精力和创建的代码都不会被浪费。

另请注意,WPF 可以像 Silverlight 一样在浏览器中运行。当我为我知道将运行 Windows 的客户端创建 Web 应用程序时,我选择 WPF 而不是 Silverlight。我目前正在将一堆 Windows 应用程序转换为 WPF Web 应用程序,以便于部署。

网页用户界面技术

如果您可以使用 Silverlight,那么在 Web 应用程序上使用 ASP.NET MVC 就太傻了。在 ASP.NET MVC 中需要数天才能完成的事情在 Silverlight 上则需要数小时或几分钟。在 Silverlight 中需要几天的事情在 ASP.NET MVC 中需要几年的时间。

Silverlight的市场渗透率目前约为50%,并且以每月2-3%的速度增长,它将在99%的台式机上运行。到明年渗透率可能会达到 85% 或更高。您必须权衡少数用户不会下载 Silverlight 且不会访问您的应用程序的风险与与 ASP.NET MVC 相关的风险:使用 ASP.NET MVC,您的应用程序将花费更多的开发成本,需要更长的时间进入市场后,功能较少,“丰富性”也较少。

也就是说,如果有一份我真的、真的、真的想要的合同,并且客户不习惯使用 Silverlight,我可能会回退到 ASP.NET MVC 作为我的第二选择。但前提是应用程序的网络部分相对较小。

通讯技术

WCF 是提供数据的不错选择。目前它比竞争对手更好,速度更快,并且与 Silverlight、XBAP 和 WPF 集成良好。如果您没有令人信服的理由选择不同的 Web 服务技术,我会选择 WCF。

就效率而言,WCF 的二进制格式化程序与您能找到的任何东西一样高效,并且对于您将遇到的使用模式比典型的直接数据库访问协议(例如 TDS)更高效。如果必须使用 SOAP 格式化程序来实现兼容性,则在转换为 XML 时会损失一些带宽,但除此之外它还是相对高效的。

我使用自己构建的名为“Emerald Data Foundation”的数据层,并计划在接下来的几个月内开源。它在 Web 服务和客户端上使用相同的对象,并且无论是否连接到后端数据库,其行为都相同。这非常有效,因为你几乎没有意识到有一个通信层。这种方法使得数据层变得极其简单。

Emerald Data Foundation 还具有基于角色的访问控制机制,允许根据数据对象之间的关系向客户端授予对数据的访问权限,例如,一个人只能访问自己的客户数据。这是在数据层强制执行的,因此 UI 层开发不会意外暴露不应看到的数据或进行未经授权的更新。