内容介绍

编写可维护的代码很重要,因为大部分开发人员都花费大量时间维护他人代码。

1.什么是可维护的代码?

一般来说可维护的代码都有以下一些特征:

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

2.怎么书写可维护的代码

书写出维护的代码最重要的就是要有一套严格的代码约定,为什么你去git上找来的项目,你能看得懂,而自己写的代码过几天就看不懂了(说的是我自己- -!)。

  • 要让代码可维护,首先它必须可读。

1.可读性的大部分内容都是和代码缩进相关,当所有代码都用同一种缩进方式时,整个项目都会更加利于阅读。(这点现在编辑器下个插件就可以实现了)。

2.注释:这个非常重要。在大多数编程语言中,对每个方法的注释都视为一个可行的实践。因为javascript可以在代码的任何地方创建函数,所以这点常常被忘记。在每个函数和方法都应该包含一个注释,描述其目的和用于完成任务所可能使用的算法。因为存在浏览器差异,JavaScript代码一般会包含一些hack,不要假设其他人在看你代码的时候能够理解,请写上你的注释。

  • 变量和函数命名是要合法并且要尽量符合其本意。
  • 松散耦合

1.解耦HTML/Javascript

  1.  
    <!-- 使用了<script>的紧密耦合的HTML/Javascript -->
  2.  
    <script type='text/javascript'>
  3.  
    document.write('hello word!')
  4.  
    </script>
  5.  
     
  6.  
    <!-- 使用事件处理程序属性值的紧密耦合的HTML/Javascript -->
  7.  
    <input type='button' onclick='dosomething()' />

虽然这些从技术上来说都是正确的,但是实践中,它们将表示数据的HTML和定义行为的Javascript紧密耦合在一起。理想情况下,html和javascript应该完全分离

2.解耦CSS/JavaScript

  1.  
    // css对javascript的紧密耦合
  2.  
    element.style.color ='red'
  3.  
     
  4.  
    // css对javascript的松散耦合
  5.  
    .red{ color: red}
  6.  
    element.className ='red'
  7.  
     

通过修改css类,就可以让大部分样式信息严格保留在css中。javascript可以更改样式类,但并不会直接影响到元素的样式,这样做的话当出现问题时,可以追溯到css而非javascript.

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

  1.  
    function handleKeyPress(event){
  2.  
    event = EventUtil.getEvent(event);
  3.  
    if(event.keyCode == 13){
  4.  
    var target = EventUtil.getTarget(event);
  5.  
    var value = 5 * parseInt(target.value)
  6.  
    if(value > 10){
  7.  
    document.getElementById('error-msg').style.display='block'
  8.  
    }
  9.  
    }
  10.  
    }

这个事件处理程序既包含了应用逻辑,还进行了事件的处理。这种方式的代码会让调试变的很难。

  1.  
    function vaildataValue(value){
  2.  
    value = 5 * parseInt(value);
  3.  
    if(value > 10){
  4.  
    document.getElementById('error-mag').style.display = 'block';
  5.  
    }
  6.  
    }
  7.  
     
  8.  
    function handleKeyPress(event){
  9.  
    event = EventUtil.getEvent(event);
  10.  
    if(event.keyCode == 13){
  11.  
    var target = EventUtil.getTarget(event);
  12.  
    vaildataValue(target.value);
  13.  
    }
  14.  
    }

将应用逻辑从事件处理程序中分离出来,就能更准确的定位问题,使代码更容易阅读。以下是应用和业务逻辑之间松散耦合的几条原则:

1.勿将event对象传给其他方法,只传来自event对象中所需的数据;

2.任何可以在应用层面的动作都应该可以在不执行任何事件处理程序的情况下进行

3.任何事件处理程序都应该处理事件,然后将处理转交给应用逻辑

书写可维护的javascript的更多相关文章

  1. 编写可维护的JavaScript代码(部分)

    平时使用的时VS来进行代码的书写,VS会自动的将代码格式化,所有写了这么久的JS代码,也没有注意到这些点.看了<编写可维护的javascript代码>之后,做了些笔记. var resul ...

  2. 《编写可维护的JavaScript》之编程实践

    最近读完<编写可维护的JavaScript>,让我受益匪浅,它指明了编码过程中,需要注意的方方面面,在团队协作中特别有用,可维护性是一个非常大的话题,这本书是一个不错的起点. 本书虽短,却 ...

  3. 编写可维护的Javascript读书笔记

    写在前面:之前硬着头皮参加了java方面的编程规范培训,收货良多,工作半年有余的时候,总算感觉到一丝丝Coding之美,以及造轮子的乐趣,以至于后面开发新功能的时候,在Coding style方面花了 ...

  4. 《编写可维护的javascript》读书笔记(中)——编程实践

    上篇读书笔记系列之:<编写可维护的javascript>读书笔记(上) 上篇说的是编程风格,记录的都是最重要的点,不讲废话,写的比较简洁,而本篇将加入一些实例,因为那样比较容易说明问题. ...

  5. 《编写可维护的javascript》读书笔记(上)

    最近在读<编写可维护的javascript>这本书,为了加深记忆,简单做个笔记,同时也让没有读过的同学有一个大概的了解. 一.编程风格 程序是写给人读的,所以一个团队的编程风格要保持一致. ...

  6. 编写可维护的JavaScript 收纳架

    如果你看过Nicolas C.Zakas写过的任何作品,你必须承认他是个不折不扣的天才.也只有天才级的才能写出<JavaScript高级程序设计>让所有的前端攻城师人手一本.Nicolas ...

  7. 【读书笔记】读《编写可维护的JavaScript》 - 编程实践(第二部分)

    本书的第二个部分总结了有关编程实践相关的内容,每一个章节都非常不错,捡取了其中5个章节的内容.对大家组织高维护性的代码具有辅导作用. 5个章节如下—— 一.UI层的松耦合 二.避免使用全局变量 三.事 ...

  8. 编写可维护的JavaScript之编程风格

    在团队中只有每个人的编程风格一致,大家才能方便的互相看懂和维护对方的代码. 1. 层级缩进 对于层级缩进目前有两种主张:1)使用制表符这种方法有两种好处,第一,制表符和缩进层级之间是一一对应关系,符合 ...

  9. 《编写可维护的JavaScript》 笔记

    <编写可维护的JavaScript> 笔记 我的github iSAM2016 概述 本书的一开始介绍了大量的编码规范,并且给出了最佳和错误的范例,大部分在网上的编码规范看过,就不在赘述 ...

随机推荐

  1. Dubbo实践(三)框架设计

    整体设计 图例说明: 图中左边淡蓝背景的为服务消费方使用的接口,右边淡绿色背景的为服务提供方使用的接口,位于中轴线上的为双方都用到的接口: 图中从下至上分为十层,各层均为单向依赖,右边的黑色箭头代表层 ...

  2. Lombok安装和使用

    前言 Lombok是一个开源项目,其使用简单的注解的形式来帮助我们简化消除一些必须有但显得很臃肿的 java 代码,特别是对于POJO. Lombok的官网:https://projectlombok ...

  3. ActiveRecord初始化,可以实现jfinal系统启动完成后,再建立数据库连接

    1.JFinalConfig的afterJFinalStart方法,可以实现系统启动成功后,调用的方法 2.ActiveRecord 多数据源初始化 package com.meiah.common; ...

  4. AMQ(approximate membership queries)介绍

    目录 简介 举例 Bloom Filter 算法过程 1)位数组: 2)添加元素,k个独立hash函数 3)判断元素是否存在集合 Quotient Filter and Cascade Filter ...

  5. 关于如何解决bootstrap table 列 切换 刷新 高度不一样

    在使用bootstrap table时候,碰到bootstrap table 列 切换 刷新 高度不一样的问题,如图所示: 解决这个问题很简单,在你的页头加一句<!DOCTYPE html> ...

  6. cocos2dx lua 一键资源管理PowerShell脚本实现

    特别说明 此管理脚本不包含图片资源加密,热更新资源文件列表是md5 和 文件路径构成的txt,如下 脚本文件是放在和res src 同级的文件夹里面 脚本内容如下 clear $PSDefaultPa ...

  7. 07 consistent gets、db block gets的简单精辟的理解

    consistent gets.db block gets的简单精辟的理解     consistent gets:一致性读,为了保持读一致性而获取的块,其中可能包括undo block,也有包括非u ...

  8. js获取今天,明天,本周五,下周五日期的函数

    代码比较简单,随便写写 /** * a连接快速选择日期函数 */ function timeChooseSimple(key, me) { //today,tomorrow,thisWeek,next ...

  9. Archlinux+gnome安装中文输入法

    环境:archlinux+gnome 1.首先需要配置Archlinuxcn源 打开/etc/pacman.conf,添加 [archlinuxcn] Server = https://mirrors ...

  10. javascript编写的一个完整全方位轮播图效果

    1 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...