内容介绍

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

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. 3.2 Spark内置RPC框架

    实现的HttpFileServer,但在Spark 2.0.0版本中它也被废弃了,现在使用的是基于Spark内置RPC框架的NettyStreamManager.节点间的Shuffle过程和Block ...

  2. WPF实战俄罗斯方块

    概述 本文试图通过经典的游戏-俄罗斯方块,来演示WPF强大的图形界面编程功能. 涉及的图形方面有这几个方面: 1.不规则界面的设置 2.布局系统的使用 3.2D图形的应用 4.输入事件的响应 5.风格 ...

  3. 测试用例组合--PICT

    测试用例组合 一原理 1.配对组合原理(两两组合原理),应用工具PICT自动输出组合 name=a,b value=1,2 key=m,n 如果自己组合那么有2*2*2=8条用例 a1m a2m a1 ...

  4. HDU 1158(非常好的锻炼DP思维的题目,非常经典)

    题目链接: acm.hdu.edu.cn/showproblem.php?pid=1158 Employment Planning Time Limit: 2000/1000 MS (Java/Oth ...

  5. Android的JNI调用(二)

    Android Studio 2.3在native下已经有了代码提示功能,按照提示下载相应组件就可以debug native代码. 一.Java调用JNI与JNI调用Java 1.1 C调用Java ...

  6. Reading SBAR SDN flow-Based monitoring and Application Recognition

    概要 在sdn下,控制平面基于网络测量的的数据控制网络,而细粒度的管理得益于细粒度的测量数据.针对sdn环境下的细粒度测量(识别具体应用程序),可以实现对细粒度的流量管控. 设计了识别系统SBAR,对 ...

  7. MySQL的笔记

    一.   SELECT tmp2.name,tmp2.browseNum FROM (SELECT tmp.`name`, COUNT(tmp.id) AS browseNum FROM(SELECT ...

  8. hiveSql常见错误记录

    1. In strict mode, if ORDER BY is specified, LIMIT must also be specified. 这个错误提示是因为在hive下写的sql使用了or ...

  9. ztz11的noip模拟赛T2:查房

    链接: https://www.luogu.org/problemnew/show/U46611 思路: 这道题告你n-1条边就是骗你的 部分分也是骗你的 这道题连对边5分钟的事 一个点对另一个点有影 ...

  10. $.ajax(),$.get(),$.post()的区别,以及一些参数注意规则

    $.ajax()方法和$.get(),$.post()方法的对比 $.ajax()方法是最完整的写法,可以完成所有的ajax请求(包含get类型和post类型) $.get()和$.post()都是简 ...