网亚机房管理软件博客

新实用主义典范

机房管理软件的隐式样式

如前所见,如果想对一个元素应用一种样式,可以将该元素的Style属性设置为资源。也可以直接将Style放在元素的属性中,而不使用资源。

然而,设置XAML样式的真正强大之处在于可以动态地对元素应用样式。此种类型的样式被称为隐式样式。创建机房管理软件的隐式样式非常简单。与前面看到的一样,只需要将样式防止在资源区域内即可,只不过要去掉x:Key特性。

此时,可能会想到这样会产生一个语法错误,因为资源字典中的每个资源都必须有一个键。其原因是XAML分析器对样式有特殊的考虑。如果没有键,XAML分析器将会在TargetType之外创建一个键。

确定机房管理软件样式的范围

在讨论Resources时,曾经提到过,在元素树中,单个资源对其位置之下的所有元素都是可见的。将Style定义为资源时,该原则同样适用。单个元素仅能使用为其本身或其祖先定义的机房管理软件样式。

这意味着如果想在应用程序的任意级别替换机房管理软件样式,只需要在对应级别定义带有相同资源键的样式即可。通常在应用程序级别防止默认的机房管理软件样式,如果某一页面需要一个不同的样式,则可以在单独的XAML页面中替换默认机房管理软件样式。


View之间的机房内部通信

既然现在已经有能力将整个UI概念化为一组不同的区域(虽然对区域管理器的数量是有限制的),那么所面临的需求是实现View Model之间的通信。比较好的示例就是将当前在“Main”区域内显示的View Model的标题显示在Header View Model中。这是一个普通的需求,同时也是第一次利用View Models的Title属性。

如果评估前面示例应用程序中Header View和Header View Model的源代码,会发现一个示例,该示例说明了View Model(Header View Model)如何监听另一个View Model的用于显示主视图的标题的属性变化。

依赖注入和控制反转机房应用

依赖注入和控制反转机房应用指一种设计实践,允许外部对象确定为依赖项使用的具体实现。这是非常有用的原则,因为它能够使类专注于单一关注点(即设计该类的目的,这与单一责任原则相一致)并委托外部关注点。抽象层通常使用接口将类从依赖项中分离。而依赖项则通过另外的机制注入,这样控制就从类反转到外部机制。

这里存在一个传统问题,任何特定的实现都有其自己的依赖项。生成PDF报表的模块可能需要引用第三方的PDF工具。而任何需要生成报表的模块都必须引用相同的工具。这将在应用程序中导致复杂的关系和依赖项。

处理不同硬件和软件的可用性

从智能手机到平板电脑,再到电视,Android已经被用到了越来越广泛的硬件上。每一种新设备都可能代表不同的硬件配置或软件平台。这种灵活性是Android得以成功的重要因素,但是其结果是你不能假设设备具有特定的硬件或运行了特定的软件。

为了减轻这种问题,Android平台版本都是向前兼容的,这意味着在特定的硬件或软件创新出现前设计的应用程序能够在不做修改的情况下利用这些创新。

使用这种Service时,可以不指定具体的硬件provider,而是提供一组条件,让系统使用一个通用接口来选择一种最佳的方案。如果将来的硬件和软件提供了更好的方法,应用程序不用更新就可以使用它。

硬件限制带来的机房设计考虑事项

由于具有小巧而轻便的特点,移动设备给软件开发领域提供了令人兴奋的机会。但有限的屏幕尺寸、较小的内存和存储空间以及较低的处理能力就没那么令人兴奋了,相反,上述因素反而带来了某些独特的挑战。

平板电脑和支持Android的电视使得你的应用程序可以在更多的设备上运行,而且客服了上面列出的一些限制。但是,考虑到可用设备的范围,在设计时考虑最坏情况总是一种最佳实践,这可确保无论应用程序安装到何种硬件平台,始终可以给用户提供满意的体验。

1.高效

嵌入式设备,特别是移动设备的制造商,更注重的较小的尺寸和较长的电池使用寿命,而不是处理器速度的提高。对开发人员来说,这就意味着失去了传统的摩尔定律(集成电路中的浸提管数量每年增加一倍)所带来的优势。在桌面计算机和服务器中这会直接带来处理器性能的改进;但对于移动设备来说,这却意味着更小、更节能,频幕则更亮、分辨率更高,但是设备在处理能力方面却没有太多提高。实践中,这就意味着总是需要对代码进行优化,使其能够快速地运行和响应,同时还要假设在软件的生存期中,硬件的改进不会给软件带来任何好处。

机房软件组装测试套件

在运行一个简单的机房软件测试用例之前,必须组装一个机房软件测试套件。回想一下,一个测试套件是把测试用例收集在一起形成一个组合,并且可以由FlexUnit测试运行程序处理。虽然在某些编程语言中,可以利用工具在运行时自动生成测试套件,但在Flex中目前都是手写的。这其实很简单,可能还有些乏味。

测试套件在扩展了flexunit.framework.TestSuite的类中定义。在大多数情况下,一个机房软件测试套件只包含一个构造函数,它重复调用继承的addTestO函数来组装成测试套件。

可释放的机房内部控制器

FrontController类维护一个包含注册的命令名和类的Dictionary,并为匹配这些命令的所有事件侦听CairngormEventDispacher单例。尽管API允许使用弱引用注册API,从而使机房内部控制器可以进行垃圾回收。有时候更确定地取消注册所有的命令是更好的做法。

为了理解原因,考虑在正在卸载的模块中声明的机房内部前端控制器。如果该模块可以进行垃圾回收,它就不会迅速地当做垃圾而回收。如果这个模块使用弱引用注册它的命令,那么该命令将会保持注册状态,知道发生垃圾回收。如果分派了一个对应的事件,那么于匹配的命令将仍被执行,即使控制器可以进行垃圾回收。因此,在卸载模块以前必须显式地删除注册的命令。这可以通过FrontController类的一个简单的扩展来实现。

管理机房软件外部SWF内容

通过使用一个SWFLoader对象加载一幅Flash动画,或在机房软件应用程序内嵌入基于SWF的内容,以便可以在运行时显示它,您可能认为这没有什么。当该SWF动画不再可见时,它不再占用任何CPU周期或造成任何屏幕重绘。

这是错误的。当使用嵌入或动态加载的基于SWF的内容,并且这项内容有一幅无限循环的动画时,要小心。只要内容仍然在Flex机房软件应用程序的显示列表中,嵌入的SWF内容中发生的任何动画都会导致发生额外的处理和重绘,即使该对象是不可见的。

这话用于通过一个SWFLoader记载的所有内容,或显示为外观的嵌入内容。如果碰到复杂的CPU使用率的问题,就尝试在Flash Player的调试版本中运行应用程序,并打开Show Redraw Region选项。如果有一幅不断循环的动画,就会发现一个红色的轮廓,其中显示Flash Player正在不断重绘的区域。

定位和调用一个机房服务

在委托内部,必须首先定位机房服务,这样才能调用它。Cairngorm提供一个ServiceLocator类,这个类简化了在MXML中声明服务,并在稍后定位它们。ServiceLocator类是一个单例,这就意味着在一个应用程序中只能存在一个实例。这个实例可以在任何地方使用静态getInstance函数访问。Cairngorm交互的这个阶段突出显示。

以下示例展示的ServiceLocator包含示例应用程序的单个RemoteObject机房服务。这一服务由一个唯一的id,以便于后面定位它,另外还有一个对应于数据服务配置文件中的目的ID的destination。可选的showBusyCursor属性也被设置,以便用户清楚地查看食肉正在请求某个服务。

«101112131415161718192021222324»

Powered By Z-Blog 2.0 Doomsday Build 121221

版权所有©2007-2013 南京网亚计算机有限公司
QQ:502800066(购买咨询) 1074187861(技术支持) 邮件: sales@ji-fang.cn
电话:( 025)84533318 (025)84533319 (025)66671103 13913982176 传真: (025)84533320
地址: 江苏省南京市中山东路198号龙台国际大厦1205室