最近忙的都 快死了啊,各种需求,各种设计做的我是心力憔悴。第十章以后某人和我说没啥用,那我就懒的再去翻译了,反正教会我的人就行了。我还是打紧抽空把六到八章补一下。已经有人和我造反了55555555
这第十章就先放这吧,啥时有空了我再补齐。。下午泪奔第六章去。。
第十章 Silverlight与WPF间共享代码
本章将帮助理解Prism观点下的多目标设计的优点和缺点。多目标代码在基于大量相似代码的前提下面向两个不同的平台。它旨在尽可能保持代码相似度的前提下生成面向两个不同技术平台的二进制文件。在这个前提下,本章所指的技术是Windows Presentation Foundation(WPF)和Silverlight。本章讲述了在为开发在些技术的多目标应用程序时的注意事项。
10.1目标和收益
当编写具有相同特性和功能的WPF和Silverlight应用程序时,使用同一套代码就很有意义。虽然WPF和Silverlight非常相似,但是它们却限制了二进制文件的兼容性。只有Silverlight4使用了某些特定的核心,Portable Framework则可以被载入到.NET Framework运行时。
因为Prism提供了大量在WPF和Silverlight下相似的功能,故而编写的大部分代码都可以在这些技术下使用。支持多目标的关键就是实现可以最大程度支持两个环境的共享代码的设计和基础架构,并且使应用程序可以集成特定环境的功能以使它们可以从桌面应用程序或者浏览器环境的功能中收益。使用Prism创建多目标复杂应用程序时,就可以在WPF和Silverlight间共享代码。
10.2 扩展阅读
如果需要创建其二进制文件可以兼容WPF和Silverlight的结构,就需要阅读这部分。关于这部分内容的更多信息,参见CLR Team博客发表的"Sharing Silverlight Assemblies with .NET Apps."
本章要描述的并不是这个场景,而是描述通过共享代码的方式构建多目标应用程序在会碰到的问题和解决方法。
10.3 多目标场景
主要的情景就是那些即要拥有个性化功能的桌面体验又要拥有大覆盖面的Internet体验的应用程序。在这些情景下,就需要开发一个拥有相同特性和工作流的WPF和Silverlight应用程序,或者有一个平台提供了不同的工作流和特性。下面是一些多目标应用程序
l 当在办公室时,为用户提供功能完整的应用程序,而为出差用户提供基于浏览器的版本。
l 为内部员工提供桌面应用程序,为客户和合作伙伴提供浏览器版本。
举例而言,一个企业为那些通过电话下订单的客户提供了电话呼叫中心,为那些通过网络下订单的客户提供了在线的订单系统。但是,两者的表单却略有不同。电话订单的表单较网络订单的表单而言提供了更多信息和扩展功能。但是因为它们为了完成相同的目标,所以表单的一部分和一些业务逻辑是共有的。
服务型应用程序更容易实现多目标,因为Silverlight本身就是服务型的。因为Silverlight本身的特性和安全性考虑,它是不支持本地存储或者数据接入的。另外需要连接的应用程序实现多目标也很简单因为Silverlight也是需要连接的。
10.4 多目标注意事项
要使应用程序有多目标的可能性,就需要考虑以下问题:
l Silverlight限制了客户机的存取
l 多目标解决方案的代码会损失一些可重用性也会相对较复杂。因为一些WPF的特性Silverlight并不支持,这些问题需要解决并且代码也可能不再优雅和易读。
l 在默认状态下,Silverlight应用程序是在安全沙盒中运行的,所以多沙盒上下文以外的事就不能做。这些应用程序对本地计算机的访问是被限制的这有助于防止一些恶意的行为。这些限制阻止了对设备的访问和与其它应用程序的交互。
【注意】:如果需要访问这些项目,可以创建Out-of-browser的Silverlight应用程序以提高可信等级。详情参见MSDN的"Trusted Applications"。
l Silverlight只提供异步通信,所以多目标应用程序是无法进行同步通信的。
可以多目标的元素
通常来说大部分代码于表现技术是无关的。又因为Silverlight和.NET Framework的相似性,这些代码大多数都是可以在两种技术间共用的。这也会\促进表现层分离设计模式的大量使用,以保证UI代码与非UI代码最大程度分离。通常,以下源代码元素是可以多目标的。
l 表现层设计模式。如MVVM,MVP,和MVC等设计模式都可以在逻辑大体相同的情况下跨平台使用。
l 服务。辅助表现的服务通常也可以成为多目标的对象
l 单元测试。一些单元测试可以借助工具成为多目标的,比如Silverlight Unit Test,框架使用了与MSTest相同的属性结构。
l 简单视图。如果使用的XAML同时支持WPF和Silverlight就可以成为多目标的。如果View只包含了基本的控件和简单的数据绑定,那就有可能在WPF和Silverlight间复用。
大部分Silverlight的API都是WPF的API的一个子集,所以使用这部分相似的API开发可以减少不可重用的可能性。因为Silverlight和WPF在XAML上的有些不同,所以以下内容很难复用。
l 复杂的View(XAML)
l 控件
l 样式
l 动画
l Expression Blend 行为和触发器