首页>文章>Web开发>ASP。网

Silverlight最佳实践:以数据为中心的应用

在他的关于Silverlight在企业中的最佳实践的系列文章的下一部分中,Microsoft Silverlight MVPJeremy Likness将介绍以数据为中心的应用程序。他向您展示了在业务线应用程序的客户机和服务器之间打包、传输和同步数据的各种方法。
喜欢这篇文章吗?我们建议

几乎所有的应用程序都是数据驱动的。数据由各种来源产生,并由应用程序使用,这些应用程序将数据转换为有意义的信息。Silverlight是一种客户端技术,数据通常在服务器端产生,因此必须传输到Silverlight客户端。与侧重于文档的内容驱动应用程序和基于工作流和算法的流程驱动应用程序不同,以数据为中心的应用程序都是围绕底层数据构建的,并公开称为CRUD操作(创建、读取、更新和删除)。

在用Silverlight构建的以数据为中心的应用程序中,有三个主要问题需要解决。首先是串行化策略,或者数据如何打包以便在客户端和服务器之间传输。第二个问题是传输本身,以及服务器和客户端如何保持数据同步。最后一个关注点是数据的表示,以允许用户交互,无论是通过数据的可视化还是通过验证编辑数据的能力。

串行化策略

数据在从后端系统传输到最终用户的过程中可以通过多种形式。在服务器上,数据可能由名称和值的字典表示。它也可以被封装在一个类中,并与行为结合起来。当数据从服务器发送到客户端时,必须将其转换为可以通过网络传输并在客户端一致地重新组装的格式。演示这一点的最简单方法是构建一个简单的类,其中包含一些数据和一个简单的行为(将姓和名结合起来提供一个全名):

public class Contact {public int Id {get;设置;}公共字符串FirstName {get;设置;}公共字符串LastName {get;设置;}公共字符串FullName{获取{返回字符串。Format("{0} {1}", FirstName, LastName).Trim();}}

如果你添加一个默认的启用了Silverlight的Windows Communication Foundation (WCF) web服务,它返回一个联系人并从Silverlight调用该服务,那么通过网络发送的实际数据是这样的:

    xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> Jeremy 1 Likness    

这就是所谓的肥皂,或简单对象访问协议。如果您曾经使用过复杂的SOAP接口,那么您就会知道SOAP并不简单。虽然底层技术是XML,但要获得实际信息需要做一些工作。还要注意的是,全名的行为不会被传输;客户端必须重新构建它,或者与服务器共享一个公共项目,以便响应映射到的类型可以保留所需的行为。幸运的是,Silverlight支持开箱即用的SOAP,并且可以轻松地连接到SOAP服务并创建适当的代理来与接口交互。

更简化的API版本可以使用直接序列化对象的处理程序来实现。类的处理程序XmlSerializer将生成以下内容:

 1 Jeremy Likness 

正如您所看到的,格式要紧凑得多。这被称为普通旧XML。在网络上还有另一种流行的格式叫做JSON,因为JavaScript对象符号。这种格式比XML更具可读性和紧凑性。它还以一种格式生成,使JavaScript可以轻松地从表示创建对象(它可以直接求值)。Silverlight可以使用系统。Json程序集来反序列化JSON实例。JSON中相同的联系人记录看起来像这样:

{"Id":1,"FirstName":"Jeremy","LastName":"Likness", "FullName":"Jeremy Likness"}

序列化数据的最紧凑的方法是通过二进制序列化。而。net包含BinaryFormatter类来自动序列化对象,Silverlight没有相应的类型。有必要使用生成字节数组的二进制写入器手动序列化对象,然后在Silverlight端使用二进制读取器反转该过程。您还可以使用第三方解决方案来打包内容。

当您使用第三方API时,您很可能无法控制序列化策略,必须使用与现有API兼容的策略。另一方面,如果你正在构建自己的API,有几个因素需要考虑:

  • 数据有多大?当必须将较大的数据集序列化为XML时,它们可以呈指数级扩展。在这种情况下,首选二进制方法。
  • 保留带宽有多重要?如果您正在编写一个将由智能手机调用的API,那么您将希望最小化消息所消耗的蜂窝带宽——同样,请考虑使用JSON和XML上的二进制。
  • 遵守开放标准有多重要?如果您希望API能够被尽可能多的客户机访问,那么使用SOAP、POX或JSON之类的标准来格式化数据是有意义的,因为有许多客户机能够识别这种格式的数据。

通常选择正确的策略是一种平衡。例如,您可能决定使用JSON,因为它比XML更紧凑,但提供了比二进制文件更开放的标准。

运输策略

序列化类型只是策略的一部分。该型号必须运输。上面所有的例子都使用超文本传输协议(HTTP)来传输有效载荷。在HTTP之上还有更复杂的协议,比如SOAP。如果希望确保传输的安全性,可以使用HTTPS在HTTP通道上提供安全的套接字层(SSL)。表征状态转移,或休息是一个用于共享数据的简单协议,也可以与HTTP一起使用。与被认为是远程过程调用(RPC)协议的SOAP不同,REST是基于资源的协议。API基于包含资源的定义良好的位置,而不是带有方法签名的过程调用。

对于移动大量实时数据的高性能应用程序,您可能希望使用比HTTP协议更低的级别,并直接通过套接字进行通信。套接字可通过System.Net.Sockets名称空间。套接字提供实时双工通信,使用TCP (传输控制协议)或UDP (通用数据报协议)。与Silverlight中的其他通信方法一样,套接字通信也是异步的。套接字的生命周期从连接开始,继续通过一系列异步发送和接收操作,并在套接字关闭时结束。有关在Silverlight中使用套接字编程的更多信息,请阅读MSDN参考使用套接字

在现有协议之上还有其他服务,以方便客户端和服务器之间的通信。在网络上公开数据的一个流行标准被称为开放数据协议(OData)。该协议提供了一个标准,使用基于http的REST接口将数据作为web上的资源公开。Visual Studio提供了一个名为WCF数据服务用于使用OData公开现有数据模型。您可以在MSDN参考中阅读该操作的演练如何:创建北风数据服务

公开的服务可以在Silverlight客户端中作为服务引用使用。客户端将查询服务并生成必要的类和操作来解析、查询和更新服务。甚至可以将二进制数据作为流来操作。要了解有关使用Silverlight消费OData的更多信息,请阅读MSDN参考Silverlight的WCF数据服务客户端库

在Silverlight中共享数据的另一种流行方式是使用WCF RIA服务。WCF RIA很重要,因为它允许跨公共后端数据系统的快速开发,并直接与实体框架集成。WCF RIA允许您使用数据注释来设置验证,并使用了一种称为投影在客户端和服务器之间共享代码。您在客户机上编写的代码就好像数据连接是本地的一样,WCF RIA处理在客户机和服务器之间连接web服务和封送调用的底层任务。

可视化策略

Silverlight提供了许多开箱即用的控件来帮助与数据交互。这些控件可以自动识别数据类型,生成列和行,甚至提供开箱即用的CRUD功能。它们能够使用数据注释来提供扩展描述以及执行验证。在以数据为中心的应用程序中使用这些控件可以显著加快开发生命周期。

数据表格

数据表格控件提供网格样式的数据视图。控件的项源可以绑定到实现的任何类IEnumerable,比如列表和可观察集合。要使网格识别插入和更新,集合应该实现ICollectionChanged接口和各个元素应该实现INotifyPropertyChanged。列生成可以识别数据注释,因此用户友好的名称可以使用DisplayAttribute。如果源数据实现ICollectionView,网格还将提供分组、排序和过滤功能。

如果源集合实现,网格将支持分页IPagedCollectionView。添加分页的一种简单方法是使用PagedCollectionView包装源数据。然后,您可以将其设置为网格的源并添加DataPager控件显示分页控件。分页控件支持几种不同的分页样式。参考MSDN文档看看不同的选项是什么样的。所有选项都可以使用部件和模板系统来进一步设计样式。

数据网格最重要的功能是,如果底层对象实现了,它将允许对网格内的记录进行内联编辑IEditableObject。当您使用WCF RIA时,这将自动实现。这些编辑支持使用为目标对象上的属性设置的任何数据注释进行完全验证。

DataForm

数据表单类似于数据网格,但它每次只处理一条记录。它允许您绑定到一组项目,并将提供用于在项目之间导航的控件,以便每次编辑一个。它支持所有CRUD模式,并且像数据网格一样,将使用数据注释来显示字段的标签。它也会识别DescriptionAttribute并提供带有工具提示的图标,以便向用户提供有关该项目的附加信息。数据表单非常高级,可以识别底层数据类型并将布尔值作为复选框公开,为日期字段提供日历选择器,并在存在数据关系时提供组合框。

数据表单可以与数据网格结合使用。一种常见的模式是使用数据网格显示项目列表,并在用户选择该行时将其展开为详细视图。然后,展开的选择使用数据表单提供用于编辑数据的详细表面。

ValidationSummary

验证摘要对象与Silverlight验证系统一起工作,提供在页面上检测到的验证问题的摘要。默认情况下,数据表单集成了验证摘要,但也可以将其添加到您自己的自定义页面中。默认情况下,它为当前表单上验证失败的项提供了一个验证详细信息的堆叠列表,但它可以完全按照您的自定义外观进行样式化。

总结

Silverlight能够与多种协议和序列化数据的方法进行交互,这使得它非常适合构建与内部和外部基于web的服务交互的业务线应用程序。WCF RIA等特性的添加使其成为快速开发以数据为中心的应用程序的可行平台。使用WCF RIA和数据表格DataForm控件,可以在一个小时内构建一个功能齐全的CRUD应用程序,支持完整的编辑和验证。对于定制的应用程序和工作流,您可以轻松地连接到遗留系统和服务,以便在客户机和服务器之间封送数据。

金宝搏188亚洲体育真人始乐InformIT促销邮件和特别优惠

我希望收到独家报价,并听到有关InformIT及其品牌家族的产品。金宝搏188亚洲体育真人始乐我可以随时退订。

概述


培生教育有限公司(Pearson Education, Inc., 221 River Street, Hoboken, New Jersey 07030)提供本网站,提供可通过本网站购买的产品和服务的信息。

本隐私声明概述了我们对隐私的承诺,并描述了我们如何收集、保护、使用和共享通过本网站收集的个人信息。请注意,培生的其他网站和在线产品及服务有其单独的隐私政策。

信息的收集和使用


为了开展业务并提供产品和服务,培生通过与本网站相关的几种方式收集和使用个人信息,包括:

问题及查询

对于查询和问题,我们会收集查询或问题,以及姓名、联系方式(电子邮件地址、电话号码和邮寄地址)以及通过“联系我们”表格或电子邮件自愿提交给我们的任何其他附加信息。我们使用这些信息来解决询问和回答问题。

在线商店

对于通过本网站上的在线商店下达的订单和购买,我们会收集订单详细信息、名称、机构名称和地址(如适用)、电子邮件地址、电话号码、送货和账单地址、信用卡/借记卡信息、送货选项和任何指示。我们使用这些信息来完成交易、履行订单、与下订单或访问在线商店的个人沟通,以及用于相关目的。

调查

培生可能提供提供反馈或参与调查的机会,包括评估培生产品、服务或网站的调查。参与是自愿的。培生收集调查问题中要求的信息,并使用这些信息来评估、支持、维护和改进产品、服务或网站,开发新产品和服务,进行教育研究以及调查中指定的其他目的。

比赛及绘图

偶尔,我们可能会赞助比赛或绘画。参与是可选的。培生收集参赛者姓名、联系方式和其他填写在参赛表格上的信息,以进行比赛或抽奖。培生可能会根据法律要求,从竞赛或抽奖的获胜者那里收集额外的个人信息,以便颁发奖品和用于税务报告目的。

时事通讯

如果您已选择接收电子邮件通讯或促销邮件和特别优惠,但想取消订阅,只需电子邮件information@金宝搏188亚洲体育真人始乐informit.com

服务公告

在极少数情况下,有必要发布严格与服务相关的公告。例如,如果我们的服务因维护而暂时停止,我们可能会向用户发送电子邮件。一般来说,用户不能选择退出这些通信,但他们可以停用他们的帐户信息。然而,这些通信在本质上不是促销。

客户服务

我们定期与用户沟通,以提供所要求的服务,并且当用户通过我们的网站提交信息时,我们会根据用户的意愿通过电子邮件或电话回复与他们的帐户有关的问题联络表格

其他信息的收集和使用


应用和系统日志

培生自动收集日志数据,以帮助确保本网站的交付、可用性和安全性。日志数据可能包括有关用户或访问者如何连接到本网站的技术信息,例如浏览器类型、计算机/设备类型、操作系统、互联网服务提供商和IP地址。我们将此信息用于支持目的和监控站点的运行状况、识别问题、改进服务、检测未经授权的访问和欺诈活动、预防和响应安全事件以及适当地扩展计算资源。

网络分析

培生可能会使用第三方网络趋势分析服务(包括Google Analytics)来收集访问者信息,如IP地址、浏览器类型、参考页面、访问过的页面以及在特定网站上花费的时间。虽然这些分析服务以匿名方式收集和报告信息,但它们可能会使用cookie来收集网络趋势信息。收集的信息可能使Pearson(但不是第三方web趋势服务)能够将信息与应用程序和系统日志数据链接起来。培生将这些信息用于系统管理、识别问题、改进服务、检测未经授权的访问和欺诈活动、预防和响应安全事件、适当扩展计算资源以及支持和提供本网站及其服务。

Cookies及相关技术

本网站使用cookie和类似的技术来个性化内容,测量流量模式,控制安全性,跟踪本网站信息的使用和访问,并提供基于兴趣的消息和广告。用户可以通过浏览器管理和阻止cookie的使用。禁用或阻止某些cookie可能会限制本网站的功能。

不要跟踪

本网站目前不响应禁止跟踪信号。

安全


培生采用适当的物理、管理和技术安全措施来保护个人信息免遭未经授权的访问、使用和披露。

孩子们


本网站不面向13岁以下儿童。

市场营销


培生可以向用户发送或直接发送营销信息,前提是

  • 培生不会将作为K-12学校服务提供商收集或处理的个人信息用于定向或有针对性的广告。
  • 这种营销符合适用法律和培生的法律义务。
  • 培生不会故意直接或发送营销通信给个人谁表示了偏好不接受营销。
  • 在适用法律要求的情况下,对营销的明示或默示同意存在且未撤销。

培生可以在有限的基础上向第三方服务提供商提供个人信息,仅代表培生或培生作为其服务提供商的关联公司或客户进行营销。营销偏好可能随时发生变化。

更正/更新个人资料


如果用户的个人身份信息发生变化(例如您的邮寄地址或电子邮件地址),我们将提供一种方法来更正或更新用户提供给我们的个人数据。这可以在帐户页面。如果用户不再需要我们的服务,并希望删除他或她的帐户,请联系我们customer-service@金宝搏188亚洲体育真人始乐informit.com我们将处理用户帐户的删除。

选择/退出


用户可以在知情的情况下选择是否继续使用InformIT提供的某些服务。金宝搏188亚洲体育真人始乐如果您选择从我们的邮件列表中删除自己,只需访问以下页面并取消您不再希望接收的任何通信:www.金宝搏188亚洲体育真人始乐informit.com/u.aspx

出售个人资料


培生不会出租或出售个人信息以换取任何金钱。

虽然皮尔逊不出售个人信息,根据内华达州法律的定义,内华达州居民可以通过电子邮件请求不出售他们的个人信息NevadaDesignatedRequest@pearson.com

加州居民补充隐私声明


加州居民应该读读我们的加州居民补充隐私声明连同本私隐声明一并提交。的加州居民补充隐私声明解释培生遵守加州法律的承诺,并适用于通过本网站和服务收集的加州居民的个人信息。

分享与披露


培生可能会在以下情况下披露个人信息:

  • 这是法律规定的。
  • 经个人同意(或其父母同意,如果个人是未成年人)
  • 在法律允许或要求的范围内响应传票、法院命令或法律程序
  • 根据适用法律保护个人、数据、资产和系统的安全
  • 与出售、合资或以其他方式转让部分或全部公司或资产有关,但须遵守本隐私声明的规定
  • 调查或处理实际的或涉嫌的欺诈或其他非法活动
  • 行使其合法权利,包括执行本网站的使用条款或其他合同
  • 培生的附属公司以及为培生工作的其他公司和组织,他们有义务按照本隐私声明保护个人信息的隐私
  • 对于学校、组织、公司或政府机构,培生在学校或代表这些组织、公司或政府机构收集或处理个人信息。

链接


本网站包含到其他网站的链接。请注意,我们不负责此类其他网站的隐私做法。我们鼓励我们的用户在离开我们的网站时保持警惕,并阅读每个收集个人信息的网站的隐私声明。本隐私声明仅适用于本网站收集的信息。

请求及联络


联系我们查阅本私隐声明,或对您的个人资料私隐有任何要求或疑问。

本隐私声明的变更


我们可能会通过更新发布来修改本隐私声明。我们将在公告中注明修订的生效日期。通常,进行更新是为了提供更大的清晰度或符合法规要求的变化。如果更新涉及个人信息的收集、保护、使用或披露的重大变化,培生将通过本网站的显著通知或其他适当方式提供变更通知。在已发布的修改证明生效日期后继续使用本网站。如果您对本隐私声明有任何疑问或疑虑,或对任何修订有任何异议,请与我们联系。

最后更新:2020年11月17日