Ext JS 4 类体系(Class System)

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"

III. Hands-on

1. 声明(Declaration)

1.1) 老方法(The Old Way)



英文原文链接:The Class System

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。