网亚机房管理软件博客

新实用主义典范

实现机房管理软件内容提供器

在创建机房管理软件内容提供器CRUD方法的过程中,有几个结构问题开发人员必须牢记。像往常构件组件一样,其中最重要的是理解组件的生命周期,以及哪些方法运行在哪些线程上。

内容提供器的onCreateO方法总是在它所属的应用程序的UI线程上运行。这意味着,它不得承担任何费时的初始化操作。幸运的是,框架保证了创建SQLiteDatabaseHeper对象是一个快速的操作—onCreateO方法可以创建帮助器的实例。

但是,不能使用该实例来获得一个数据库实例。如前所述,获得实际的数据库实例可能需要重建数据库的整个架构,并用数据重新填充它。在UI线程上运行这一操作过于缓慢。

机房管理内容解析器:客户和提供器之间的联系

就示例来看,内容提供器完全用在游标加载器的幕后。所有细节都隐藏在其实现中。在机房管理应用程序中添加一个新功能,将有助于揭示其中的一些细节。数据插入这个新功能的实现类似于之前展示的查询的实现。这又向内容提供器更近了一步,并且在这个示例中需要编写在加载器中隐藏的代码。

在UI中为应用程序添加一对文本字段和一个按钮,当单击按钮时,把一对文本字段中的内容作为新的键/值对插入数据库中。

新功能使用添加到视图的新按钮,将插入的新键/值对提交到数据库中。按钮的onClickO方法中的代码(未列出)创建AsyncInsert任务的一个新实例,并执行它。与查询的示例不同的是,这个简单的插入是触发后自动执行的。与加载器不同,插入任务不返回结果,并在完成后不需要方法来通知任何人。

创建机房软件数据库:SQLLiteOpenHelper类

一个典型的Web服务中,创建机房软件数据库可能是明确的、不频繁的和工作量的任务。设计、优化、维护和更新数据库引擎可能是非常专业的工作。一个组织可能设置会雇用与它的技术人员完全分开的数据库管理员来做这样的工作。不管是谁做的工作,创建数据库显然是应用程序安装的一部分,而不是执行应用程序的一部分。

在移动应用程序安装的一部分,情况就不同了。当用户安装一个新的应用程序时,该应用程序将必须创建自我。应用程序Bundle就是一切。如果数据库是必要的,应用程序将必须创建它。SQLiteOPen类是Android解决这种边缘特殊环境的工具。

构建user机房管理服务

将扩展该功能,允许每个用户指定他希望追踪的感兴趣的股票列表。特别是,user机房管理服务将公开一个股票代号的数组,stockPrices服务将使用它了解应该向Yahoo Finance API申请哪种股票的价格。不用创建机房管理服务器组件用于存储和加载当前登录的用户,因为设置服务器和数据库将为这个样例增加大量的复杂性,从而淡化它作为教学样例的作用。因此,user服务上的save和load函数都是存根,但是如果有真正的服务存在的话,设计模式是相同。

该服务使用了factory函数,默认用户正在监视Google和Yahoo的股票价格。当user服务被创建时,它将自动从服务器加载当前那登录的用户。在本例中,这个操作是一个存根,但是将它转换成服务器调用是非常直观的。只有一个控制器与该服务直接交互。允许用户向他的监视列表添加新的股票的控制器。

编写机房管理软件指令

只要表达式每次计算的结果不同,digest循环将持续运行下去。编写一个触发无线digest循环的简单表达式并不常见。不过,通过ngRepeat机房管理软件指令,过滤器可能很容易就搬起石头砸自己的脚。例如,在之前的样例中,我们有一个国家列表,使用一个含有普通字符串的数组进行表示。为将该字符串数组转换成一个含有name特性的对象数组,你可能认为可以使用过滤器。

如果我们运行该代码,控制台输出中将会显示出无限digest循环。作用域中有一个备用的watcgCollection函数,它只做浅层的相等性检查。这就是说,如果两个数组的大小不同或者数组中的某个元素不恒等于另一个数组中的元素,watchCollection函数将通过这种方式判断出两个数组是不相等的。注意在JavaScript中,只有当两个对象含有相同的内存地址时操作符才会返回true。实际中我们很少使用watchCollection函数,所以在AngularJS内部之外的地方不太可能看到它。

编译机房软件内部设置或者编译与链接

Compile函数和它与link函数的关系是一个常见的混淆来源。对于大部分将要编写的指令来说,编译机房软件内部设置是不必要的。使用Compile函数有两个主要原因。第一个是解决含有大量DOM操作的指令的性能问题——最常见的样例是ngRepeat和创建多个DOM元素的类似指令。第二个原因是编译函数可以修改指令的模板。不过第二个原因会受一点限制,因为Compile函数将在指令的作用域被创建之前运行。因此,Compile函数无法访问指令的作用域,所以它不能计算特性。

那么Compile函数真正的用途是什么呢?将通过构建内嵌ngRepeat指令的简化版本,浏览Compile函数的优点和限制。将把ngRepeat指令简化为ngRepeatOnce,实现一个常见的AngularJS性能优化:减少页面中监控器的数量。我们看到了在一个大型数组上使用ngRepeat指令将使页面变得迟缓,因为每个apply调用必须迭代整个数组。现在ngRepeatOnce通过不在底层数组上调用watch的方式改善了这个问题。该指令在用户从底层数组添加或者删除元素时不会更新,但是它允许处理比ngRepeat更大的数组。尽管无法在元素添加或者删除时更新是一个限制,但是在许多用例中这个功能是不必要的。

使用location追踪机房管理软件页面状态

修改URL哈希部分最常见的用例是:使用户可以保存一些页面内的状态,例如JavaScript变量或者用户的滚动位置。Location服务允许对URL的哈希部分做更多的操作。将使用location服务允许用户在图书预览中高亮显示文本,并在页面的URL中追踪它们高亮显示了什么。这将使用户可以收藏最喜爱的段落或者在社交媒体中分享有号召力的名言。

之前的代码演示了与location服务交互的基本设计模式。通常,使用location服务在URL中追踪JavaScript状态时,在机房管理软件页面加载之后(也就是控制器初始化时),我们首先会立即从URL中加载机房管理软件数据。该设计模式的第二个部分是在变量改变时更新URL,所以URL将与JavaScript状态保持一致。

构建stockPrice机房管理服务

服务stockPrices将加载和显示user服务的监视列表中股票的价格。再次,服务是单例,所以stockPrices服务使用的user对象与控制器相同。stockProces服务看起来与前面的googleStock服务相似,但是它将从user服务的监视列表中获得股票代号的列表。

该服务由一个load函数,用于从Finance API加载股票价格的完整列表。与使用异步I/O的许多服务一样,当load函数等待HTTP请求返回时,它将把loading标志设置为true,从而使UI可以向用户显示一个加载指示器。另外,该服务将使用interval服务,之前我们尚未使用过。Interval服务是对JavaScript setInterval函数的一个方便的封装,它将安排函数以特定的频率重复地执行。Interval服务将setInterval函数绑定到数据绑定,所以不需要在传给interval服务的函数中调用scope apply。在stockPrices服务中,将调用interval服务,安排service.load函数每5000毫秒执行一次。

请求机房软件拦截器

机房软件拦截器既可以转换HTTP响应,也可以转换HTTP请求。拦截器可以定义一个request函数,它将接受HTTP请求配置作为参数。如同response函数一样,request函数必须返回修改后的HTTP请求。

请求机房软件拦截器的一个常见用例是为每个请求设置HTTP。换句话说,可以使用拦截器将凭据附加到所有请求中(尽管实际上是否需要这样做取决于服务器)。这个用例强调拦截器的另一个重要功能;拦截器被绑定到了依赖注入,所以我们可以访问服务。追踪当前登录用户最好使用服务完成。

构建自己的机房软件服务

将使用机房软件服务构建一个简单的市场仪表板。你可能注意到该代码类似于其他章节中使用的Stock-Dog应用。演示创建服务的不同方式,所以如果之前已经了解Stock-Dog代码,那么你已经小小地领先了异步。查看本章的HTML页面不要求使用服务器。不过,有一个样例将使用一个简单的NodeJS Web服务器,所以如果尚未安装NodeJS,就应该访问nodejs.org,并按照所选择平台对应的安装指令进行安装。

AngularJS模块对象有5个函数,用于向依赖注入器声明机房软件服务。3种最常见的方式就是serviceO、factoryO和providerO函数。

«456789101112131415161718»

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室