Ext JS在其历史上第一次进行了彻底的类体系的重构。新的架构应用到了几乎每一个Ext JS 4.x的类中,因此在使用它编写代码之前理解它是非常必要的。
本手册适用于所有在Ext JS 4.x中创建新类和继承已有类的程序员。分为四部分:
- 第I部分:“Overview”分析了鲁棒的类体系的需求
- 第II部分:“Naming Conventions”讨论命名类、方法、属性、变量和文件的最佳实践
- 第III部分:“Hands-on”给出了代码示例
- 第IV部分:“Errors Handling & Debugging”给出了一些处理异常的技巧
I. Overview
Ext JS 4包含超过300个类。目前Ext JS社区聚集了来自世界各地各种编程背景的二十多万名开发人员。对于这种规模的框架,我们在提供一般的编码架构方面面临巨大挑战:
- 便于学习
- 快速开发,便于调试,便于部署
- 条理清晰,高可扩展性,高可维护性
JavaScript是一种无类型,面向原型(prototype-oriented)语言。因此,JavaScript本质上最强大的特性之一就是灵活性。它可以通过多种方式、不同编码风格和技术完成同一任务。但是高灵活性是以不可预测性为代价的。如果没有统一的结构,JavaScript代码是难以理解、维护和重用的。
另一方面,基于类(class-based)的编程仍然是OOP最常见的模型。基于类的语言(class-based languages)通常是强类型的(strong-typing),支持封装,且有标准的编码规范。通过使程序员们遵循一系列的规则,代码变得更加可预测、可扩展。然而,它们没有JavaScript等语言的动态性。
每种方式都有各自的优点和缺点。我们是否能够只取它们的优点,隐藏它们的缺点呢?答案是肯定的,我们在Ext JS 4中实现了这种解决方案。
II. Naming Conventions
代码中的classes、namespaces和文件名使用一致的命名规范提高了代码的条理性、结构性和可读性。
1) Classes
类名只能含有字母和数字字符。多数情况下应该避免使用数字,除非这些数字属于某个专业术语。不要使用下划线、连字符和任何其他的非字母数字的字符。例如:
- MyCompany.useful_util.Debug_Toolbar是不推荐使用的
- MyCompany.util.Base64是可接受的
类名应该使用点符号(.)分组到相应的包中。至少应该有一个唯一的顶层命名空间。例如:
MyCompany.data.CoolProxy MyCompany.Application
顶层命名空间和类名应该使用驼峰命名法,其他的应该全部使用小写。例如:
MyCompany.form.action.AutoLoad
非Sencha发布的类不应该使用Ext作为顶层命名空间。
缩写词也应该遵循驼峰命名法。例如:
- 使用Ext.data.JsonProxy代替Ext.data.JSONProxy
- 使用MyCompany.util.HtmlParser代替MyCompary.parser.HTMLParser
- 使用MyCompany.server.Http代替MyCompany.server.HTTP
2) Source Files
类名直接映射到该类存储的路径。因此,每个类必然只对应一个文件。例如:
- Ext.util.Observable存储在path/to/src/Ext/util/Observable.js
- Ext.form.action.Submit存储在path/to/src/Ext/form/action/Submit.js
- MyCompany.chart.axis.Numeric存储在path/to/src/MyCompany/chart/axis/Numeric.js
path/to/src是你的应用程序的类所在目录。所有的类都应该存储在这个根目录中,而且应该分为适当的包以便于开发、维护和部署。
3) Methods and Variables
- 类似于类名,方法名和变量名也只能使用字母数字(alphanumeric)字符。多数情况下,应该避免使用数字,除非数字属于某个专业术语。不要使用下划线、连字符和其他非字母数字(nonalphanumeric)字符。
- 方法名和变量名也应该遵循驼峰命名法。这也适用于缩写词。
-
例子
- 合理的方法名:encodeUsingMd5();getHtml()代替getHTML();getJsonResponse()代替getJSONResponse() ;parseXmlContent()代替parseXMLContent()
- 合理的变量名:isGoodName、base64Encoder、xmlReader、httpServer
4) Properties
- 类变量(class property)命名遵循与方法名变量名相同的规范,除了静态常量(static constant)的情况。
-
静态类常量应该全部采用大写字符。例如:
- Ext.MessageBox.YES = "Yes"
- Ext.MessageBox.NO = "No"
- MyCompany.alien.Math.PI = "4.13"
- Ext.MessageBox.YES = "Yes"
III. Hands-on
1. 声明(Declaration)
1.1) 老方法(The Old Way)
英文原文链接:The Class System