本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步。

今天讨论的是什么

如果你的工作中需要写JavaScript,而你的JavaScript代码又与业务相关。我想无非就是一下三类功能:

1.请求后台数据

2.渲染后台数据,拼接Html

3.事件操作

当然你如果封装JS底层的控件,不在我们今天的讨论范围。你也许写过单文件上千行的JS,你也许维护过几千行的JS,每次重新看起来,或者增删改功能吃力吗,如果你说不吃力,那这篇文章不适合你,如果有些吃力,我们一起来探讨今天的话题。今天要讨论的是,当你需要写如上三种JS代码时,你如何处理他们之间的关系?

提醒:如果你还不懂JS对象或者简单的封装,请移步我的这两篇分享:

1.JavaScript 闭包   http://www.cnblogs.com/tdws/p/5944254.html

2. JavaScript OOP http://www.cnblogs.com/tdws/p/5947693.html

代码整洁之道

仅仅是整洁的代码真的有用吗?

我想说整洁的代码只是一部分。这个整洁所包含的,我认为是:

1.一个方法只做一件事情,一个方法的行数一定要对自己做严格要求,多余的事情,另起一个方法,并配有合适的命名。

举个例子来说,我在ajax请求都数据,回调方法可能需要对返回结果做一定的逻辑处理,拼接处理。在这个时候,我是很反对直接在回调方法中写一长串处理逻辑的,一定要用一个新的function来处理。

2.坚决杜绝全局变量。

有的人可能认为,如果我注意点,全局变量并不会带来什么坏的影响。这样说没毛病,但是全局变量带来的难以阅读和难以维护性是不可估量的。

3.绝不在页面底部或者$(function(){});或者onload中直接以$(xxx).click(function(){});这种形式来注册事件。也绝不在html拼接成功后的方法中以上述方式注册事件。

个人推崇的方式是,一定要将事件注册封装成方法。然后再去调用方法。

其余的整洁规范不做赘述,代码整洁这种东西,要在不断的实践中,用心去思考和体会,并且亲手优化和修改,只有一套理论摆着这里,收获是0。

JavaScript代码分"层"

下面要讨论的这种方式,一定是基于上述代码整洁之道的基础之上。开篇的三个常用JS代码情形,你想到办法如何将他们分离解耦,如何处理好他们之间的关系了吗?

比方说,你在做一个互联网新闻网站。

对于这样的一个新闻列表,你可能需要Ajax对数据做增删改查操作,你也需要从后台读取数据并且渲染到页面,你也需要为页面上的一系列按钮或者什么控件注册一系列的操作事件。

这简单啊,这有什么难的!但是当你页面中新闻数据仅仅是一个小模块的时候,其他模块可能还有用户信息模块,评论模块,点赞模块,各种分类模块,广告招商模块,各种热门模块。如果想象不到复杂性,可以去网易新闻官网看看。

当然在这样的情况下,你可能说,分离js呀,js模块化,js合并压缩。是的,这些都是不错的解决方案。但是,你如何保证一个单独的JS或者模块化后的JS依然保持慢条斯理,结构清晰?或者说如果这些代码真的要写在一个JS里,如何写,如何维护。

有的老司机可能说,你不会是随便来谈谈MVVM吧?不是。在数据请求,数据渲染,事件注册这三种情形,在复杂的业务逻辑之下,我们要做的就是解耦分离。下面是我个人的解决方案,是我在不断的实践和尝试过程当中,感到受用,好用,一直在用的一种方案:

将上述三种代码分层,一个JS对象就是一“层”。每个业务点基本都分为这三层。

 
最后的阐述

上面就算是伪代码吧。你可以看到我将js分为三层,操作,数据,渲染。你也可以看到,我们可以告别全局变量,和数据相关的全局变量,你将其存在相应的Data层下。业务相关的全局变量,你将它存在操作层下。渲染拼接工作就交给render来做,我通常渲染工作为了达到再度分离js html,我使用jquery.tmpl.js。你所有新闻相关的数据操作都应该放在newData层下,你所有操作事件应该写在newsOption层下。当你来了第二个业务点时,比如评论模块,那你就需要一套新的分层:commentOption,commentData,commentRender.

可能看完你想打我,我看了这么半天你就分享这点东西?但是相信我,这样的分层,对你自己而言赏心悦目,维护方便,开发快捷,调试容易。对他人而言,别人不会在背后骂你的代码咯。

JavaScript结构三层——思想快速入门的更多相关文章

  1. JavaScript结构三层——思想快速介绍

    本文版权归博客园和作者吴双本人所有,转载和爬虫请注明原文地址 http://www.cnblogs.com/tdws/,我是博客园蜗牛,我们共同进步. 今天讨论的是什么 如果你的工作中需要写JavaS ...

  2. JavaScript学习02(js快速入门)

    快速入门 基本语法 JavaScript的语法和Java的语法类似,每个语句以;结束,语句块用{...}.但是JavaScrip并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代 ...

  3. vue 快速入门 系列 —— Vue(自身) 项目结构

    其他章节请看: vue 快速入门 系列 Vue(自身) 项目结构 前面我们已经陆续研究了 vue 的核心原理:数据侦测.模板和虚拟 DOM,都是偏底层的.本篇将和大家一起来看一下 vue 自身这个项目 ...

  4. html5快速入门(四)—— JavaScript

    前言: 1.HTML5的发展非常迅速,可以说已经是前端开发人员的标配,在电商类型的APP中更是运用广泛,这个系列的文章是本人自己整理,尽量将开发中不常用到的剔除,将经常使用的拿出来,使需要的朋友能够真 ...

  5. JavaScript快速入门(四)——JavaScript函数

    函数声明 之前说的三种函数声明中(参见JavaScript快速入门(二)——JavaScript变量),使用Function构造函数的声明方法比较少见,我们暂时不提.function func() { ...

  6. JAVA WEB快速入门之从编写一个JSP WEB网站了解JSP WEB网站的基本结构、调试、部署

    接上篇<JAVA WEB快速入门之环境搭建>,在完成了环境搭建后(JDK.Tomcat.IDE),现在是万事具备,就差写代码了,今天就来从编写一个JSP WEB网站了解JSP WEB网站的 ...

  7. IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端

    IdentityServer4 中文文档 -15- (快速入门)添加 JavaScript 客户端 原文:http://docs.identityserver.io/en/release/quicks ...

  8. 【JavaScript】快速入门

    摘抄地址快速入门 No1: JavaScript严格区分大小写 No2: JavaScript不区分整数和浮点数,统一用Number表示 NaN表示Not a Number,当无法计算结果时用NaN表 ...

  9. SpringBoot介绍,快速入门小例子,目录结构,不同的启动方式,SpringBoot常用注解

    SpringBoot介绍 引言 为了使用ssm框架去开发,准备ssm框架的模板配置 为了Spring整合第三方框架,单独的去编写xml文件 导致ssm项目后期xml文件特别多,维护xml文件的成本也是 ...

随机推荐

  1. java 22 - 17 多线程之等待唤醒机制(接16)

    先来一张图,看看什么叫做等待唤醒机制 接上一章的例子. 例子:学生信息的录入和获取 * 资源类:Student  * 设置学生数据:SetThread(生产者) * 获取学生数据:GetThread( ...

  2. python处理经过gzip压缩的网页内容

    Python在进行网页抓取时,有时会获取到经过gzip压缩后的数据(体积小,传输快),导致无法阅读和使用. 如图所示,为http原始报文.可以看到,header区域的“Content-Encoding ...

  3. P3381 【模板】最小费用最大流

    P3381 [模板]最小费用最大流 题目描述 如题,给出一个网络图,以及其源点和汇点,每条边已知其最大流量和单位流量费用,求出其网络最大流和在最大流情况下的最小费用. 输入输出格式 输入格式: 第一行 ...

  4. githup上传代码

    把自己本地东西上传到GitHup上. 本文内容来自于http://blog.csdn.net/yuanzichao/article/details/44922593 1.安装msysgit和Torto ...

  5. Visual Studio 2013编辑HTML文件无设计视图的解决方案

    在Visual Studio 2013中编辑HTML文件,会发现没有设计视图. 解决方法:点击Visual Studio 2013的”工具“菜单,再点击”选项“—>文本编辑器—>文件扩展名 ...

  6. Windows 8.1 新增控件之 AppBar

    Windows 8.1 与Windows 8 相比已经有了很多改进,从ITPro 角度这篇文章<What's New in Windows 8.1>已经表述的很详细.对开发者来说,最明显的 ...

  7. 15个nosql数据库

    1.MongoDB 介绍 MongoDB是一个基于分布式文件存储的数据库.由C++语言编写.主要解决的是海量数据的访问效率问题,为WEB应用提供可扩展的高性能数据存储解决方案.当数据量达到50GB以上 ...

  8. 向jboss写入服务器日志

    实际开发中,记录日志是常用的功能,jboss默认情况下已经记录了很多运行日志,如果开发人员要手动在server.log中写入日志,可以参考下面的方法: package utils; import ja ...

  9. osx开发,skport项目记录

    最近在研究前端框架,学习了一下vue.js,而后找到了element.js,后来又了解到了cooking···前端开发真是三天小更新,一周大变样,一个月天翻地覆啊··· 期间在使用cooking时遇到 ...

  10. Linux vmstat命令实战详解

    vmstat命令是最常见的Linux/Unix监控工具,可以展现给定时间间隔的服务器的状态值,包括服务器的CPU使用率,内存使用,虚拟内存交换情况,IO读写情况.这个命令是我查看Linux/Unix最 ...