可维护性

需要遵循以下特点:

  1. 可理解性:其他人可以接手代码并理解它的意图和一般途径,而无需原开发人员的完整接手。
  2. 直观新:代码中的东西一看就能明白,不管其操作过程多么复杂。
  3. 可适应性:代码以一种数据上的变化不需求完全重写的方法撰写。
  4. 可扩展性:在代码架构上已考虑到在未来允许对核心功能进行扩展。
  5. 可调试性:当有地方出错时,代码可以给予你足够的信息来尽可能直接地确定问题所在。

代码约定

可读性

  • 函数和方法——每个函数或方法都应该包含一个注释,描述其目的和用于完成任务所使用的算法。陈诉事先的假设也非常重要,如参数代表什么,函数是否有返回值(因为这不能从函数定义中推断出来)。
  • 大段代码——用于完成单个任务的多行代码应该在前面放一个描述任务的注释。
  • 复杂的算法——如果使用了一种独特的方式解决某个问题,则要在注释中解释你是如何做的。这不仅仅可以帮助其他浏览你代码的人,也能在下次你自己查阅代码的时候帮助理解。
  • Hack——因为存在浏览器差异,JavaScript代码一般会包含一些hack。不要假设其他人在看代码的时候能够理解hack所要应付的浏览器问题。如果因为某种浏览器无法使用普通的方法,所以你需要用一些不同的方法,那么请将这些信息放在注释中。这样可以减少出现这种情况的可能性:有人偶然看到你的hack,然后“修正”了它,最后重新引入了你本来修正了的错误。

    变量和函数命名

  • 变量名应为名称如car或person

  • 函数名应该以动词开始,如getName()。返回布尔类型值的函数一般以is开头,如isEnable()。
  • 变量和函数都应使用合乎逻辑的名字,不要担心长度。长度问题可以通过后处理压缩。

必须避免出现无法表示所包含的数据类型的无用变量名。有了合适的命名,代码阅读起来就像讲述故事一样,更容易理解。

松散耦合

解耦HTML/JavaScript

  1. HTML呈现应该尽可能与JavaScript保持分离。当JavaScript用于插入数据时,尽量不要直接插入标记。一般可以在页面中直接包含并隐藏标记,然后等到整个页面渲染好之后,就可以用JavaScript显示该标记,而非生产它。另一种方法是惊喜Ajax请求并获取更多要显示的HTML,这个方法可以让同样的渲染层(PHP/JSP/Ruby等等)来输出标记,而不是直接嵌在JavaScript中。

解耦CSS/JavaScript

错误例子:
最佳实践 - 图1
正确例子:
最佳实践 - 图2

解耦应用逻辑/事件处理程序

错误的例子:
最佳实践 - 图3
正确的例子:
最佳实践 - 图4

以下是要牢记的应用和业务逻辑之间松散耦合的几条原则:

  • 勿将event对象传给其他方法;只传来自event对象中所需的数据;
  • 任何可以在应用层面的动作都应该可以在不执行任何事件处理程序的情况下进行。
  • 任何事件处理程序都应该处理事件,然后将处理转交给应用逻辑。

    编程实践

    尊重对象所有权

    企业环境中最重要的编程实践就是尊重对象所有权,它的意思是你不能修改不属于你的对象。简单地说,如果你不负责任创建和维护某个对象、它的对象或其它的方法,那么你就不能对它们进行修改。更具体地说:

  • 不要为实例或原型添加属性;

  • 不要为实例或原型添加方法;
  • 不要重定义已存在的方法。

最佳的方法便是永远不修改不是由你拥有的对象。所谓拥有对象,就是说这个对象是你创建的,比如你自己创建的自定义类型或对象字面量。而Array、document这些显然不是你的,它们在你的代码执行前就存在了。你依然可以通过以下方式为对象创建新的功能:

  • 创建包含所需功能的新对象,并用它与相关对象进行交互;
  • 创建自定义类型,继承需要进行修改的类型。然后可以为自定义类型添加额外功能。

    避免全局量

    最佳实践 - 图5
    最佳实践 - 图6

    避免与null比较

    最佳实践 - 图7
    最佳实践 - 图8

如果看到了与null比较的代码,尝试使用以下技术替换:

  • 如果值应为一个引用类型,使用instanceof操作符检查其构造函数;
  • 如果值应为一个基本类型,使用typeof检查其类型;
  • 如果是希望对象包含某个特定的方法名,则使用typeof操作符确保指定名字的方法存在于对象上。

    使用常量

    最佳实践 - 图9

显示在用户界面上的字符串应该以允许进行语言国际化的方式抽取出来。
最佳实践 - 图10