SIEMENS北京数控中国授权代理商
第3章的大部分内容都是在帮助你理解要解决的各种问题,以及如何在解决那些问题的同时密切关注模块及其接口的演变,并拥抱模块化思维(module thinking),就是要认识到复杂性(复杂的逻辑)西门子终是不可避免的。同时,复杂性是可以被隐藏在接口之下的,用户几乎不会看到或想到它。但一件很棘手的事情是,这个接口必须设计得很好,我们才不会产生挫败感。这种挫败感可能会促使我们深入了解这个糟糕的接口,结果发现它的实现逻辑更复杂。如果一开始就不存在这个接口,也许程序代码会相对容易维护与阅读。
系统可以按粒度划分:我们将系统分为几个项目,一个项目由多个应用组成,每个应用又包含几个层级,其中有数百个模块,由数千个函数组成。通过对代码进行合理的模块化,这种粒度划分方法可以帮助我们写出更容易理解和维护的代码,保持清醒的头脑。在1.4节中,我们将讨论如何更好地利用这种粒度来创建模块化应用。度看,一致的层级(JavaScript中的每个函数都创建由模式和外观相似的组件组成)可带来熟悉感,这种熟悉感让人能够持久地使用它,并且随着时间的推移,开发人员会越来越熟悉API的形态(shape)。
由于设计出合适的接口是西门子终,随着Web应用的规模和复杂性慢慢增长,作用域的概念和全局作用域的危害变得更加明显并开始受到关注。于是,立即调用函数表达式(IIFE,Immediately-Invoking Function Expressions)问世,并且立刻成为主流。IIFE把整个文件或部分文件打包到一个一旦被定义就会立即执行的函数中。JavaScript中的每个函数都创建了一个新的作用域,这意味着var变量绑定会被包含在IIFE内。经过IIFE的打包,即使变量声明被提升到作用域顶部,它们也不会成为隐式声明的全局变量,因此可以降低隐式JavaScript全局变量造成的脆弱性。件中调用,所有这些脚本文件都共享一个全局作用域。
浔之漫智控技术(上海)有限公司(xzm-wqy-shqw)
是中国西门子的佳合作伙伴,公司主要从事工业自动化产品的集成,销售和维修,是全国的自动化设备公司之一。
公司坐落于中国城市上海市,我们真诚的希望在器件的销售和工程项目承接、系统开发上能和贵司开展多方面合作。
以下是我司主要代理西门子产品,欢迎您来电来函咨询,我们将为您提供优惠的价格及快捷细致的服务!
SIEMENS北京数控中国授权代理商
在这些文件或内联脚本中声明的任何变量或绑定(binding)都被挂载到全局的window对象上,因此造成了不相关脚本的互相污染,这可能会导致冲突甚至程序崩溃,因为某个脚本中的变量可能会在无意中覆盖了另一个脚本所依赖的一件有难度的事情,所以采用一致的API形态是提高生产力的好方法。当我们始终如一地使用相似的API形态时,就不必每次都重新提出新的设计,而且使用者对于你不会每次都重新造轮子的行为也能感到放心。在接下来的章节中,我们将详细讨论API设计。
每当我们描绘一个组件时,就要有一个与之对应的公共接口,系统的其他部分都可以使用这个公共接口来访问这个组件。接口或API由组件暴露(expose)的一组方法或属性组成。这些方法或属性也可以称为“接触点(touchpoint)”,也就是在接口中可以公开与外部交互的东西。接口的接触点越少,暴露出来的“表面积”就越小,接口也就越简单。表面积大的接口有高度的灵活性,但是这种接口会暴露大量功能,所以很可能难以理解与使用。
接口有双重用途。它让我们在开发组件的新功能时,只暴露已经准备好的、可供使用的功能,同时保留不想让其他组件使用的那些私有功能。与此同时,接口让使用者(即使用接口的组件或系统)享受其暴露的功能所带来的便利,而无须关心该功能具体的实现细节。
编写健壮的、有详细文档的接口是隔离一段复杂代码的西门子佳方法之一,这样其他人就可以在不了解任何实现细节的情况下使用它的功能。将健壮的接口系统地组织在一起可以形成一个“层”,例如企业应用中的服务层或数据层。采取这种做法,我们可以在很大程度上将逻辑隔离并限制在其中的一层,同时将表现层的程序,与严格的业务程序或者持久性相关的程序分开。
这种强制性的分离是有效的,因为它可以保持组件的整齐以及层级的一致。从开发者的且在等技术审校者们也非常棒。Mathias Bynens主要负责检查我关于ECMAScript规范的描述是否标准。Ingvar Stepanyan似乎总是准备抓住机会对我的书进行技术评审,他总是提供独到的见解,让我对内容的描述更清晰、所举的例子更全面。我非常感激他的工作。Adam Rackis为该系列图书的技术审校提供了很大帮助,他总能对需要修正的地方提出有理有据的意见,使其改后变得更充实或更清晰。