一个项目前期的分层设计是很重要的,一个好的分层结构会使我们的代码组织条理更清晰,减少冗余,提髙代码重用率。和 CSS — 样,我 觉得将 JavaScript 也分成三层也是比较合理的,从下往上依次是 base 层、 common 层 和 page 层 。需要 说明的是,如何分层是一件主观的事情,为 的 是 “ 把事情变得更好” ,没有对和错之 分,只有好和坏,我并不是说 “ 只有这样分层才是对的”,下面简单列出这几个层的一个介绍
1. base 层
位于三层的最底端,这一层有两个职责。职责一是封装不同浏览器下 JavaScript 的差异,提供统一的接口,我们可以依靠它来完成跨浏览器兼容的工作。职责二是扩展JavaScript语言底层提供的接口,让它提供更多更为易用的接口。 base 层的功能是给 common 层 和 page 层提供接口
2. common 层
位于三层的中间,依赖 base 层提供的接口。 commom 层提供可供复用的组件,它 是典型的 MVC 模式中的 M, 和页面内的具体功能没有直接关系。 common 层的功能是给 page 层提供组件。
3. page 层
位于三层的最顶端。这一层和页面里的具体功能需求直接相关,相当于 MVC模式中的C, page 层依赖于 base 层 和 common 层。 page 层的功能是完成页面内的功能需求。
引申:
其实page 层是和页面里的具体功能需求直接相关。如果页面里的功能需求 很简单,页面里可以没有 base 层代码,甚至可以没有 common 层代码,但一定会有 page 层 代码。 可以说base 层 和 common 层都是属于框架级的, page 层是属于应用级的,它可以调用 base 层的接口和 common 层的组件。
下面举例形象化这三者的关系:
我们平时绝大部分工作都是在 page 层完成的,有了分层的概念, page 层的工作就非 常轻松了。如 果 base 层 和 common 层足够丰富和稳定,我们就可以将精力全部放在具体 业务逻辑上,跨浏览器兼容和常用组件都可以交给 base 层 和 common 层去完成,一方面 可以极大地提高开发效率,另一方面也可以大大提高代码的重用率,减小网页的大小,下面举一个生动的例子:
如果没有 base 层 和 common 层 ,直接用原生 JavaScript 写程序,就像是开着汽车行 驶在一条不平坦的泥路上,一路上有凸起的石块(浏览器兼容带来的阻碍) ,也有凹陷 的 沼 泽 (原生 JavaScript 提 供 的 底 层 接 口 不 足)
引 入 base 层之后呢,就像铲平了泥路上凸起的石块(提供跨浏览器兼容的接口) ,填满了 凹陷的沼泽(弥补原生 JavaScript 底层接口的不足) 。在 base 层的基础上写程序,就像 汽车行驶在一条平坦的泥路上。
继 base 层之后,再 引 入 common层,就像在平坦的泥路上铺上了一层沥青,路再也不是普通的泥路了,它成了高速公路。在 base 层 和 common 的基础上写Javascript, 就像开着汽车在高速公路上飞驰!
结语
其实在平常的工作学习中,一定要学会归类学习,重要的去学习一些思想,就像这次的这个分层理念,其实对于Javascript和CSS都是非常适用的,并且最终都是能做到是自己的代码精炼和具有条理的,重要的是可维护性会很强。
每当读书的时候,就会发现自己很渺小,需要去学习的东西还有很多,随时学习的心态必须时刻具备,上面的总结是从Web前端开发修炼之道当中凝练出来的,记录下来,也是提醒下自己的分层意识,随着现在前端越来越成熟和规范的时候,我们每一个前端人都应该时刻要去具备一颗追求卓越的心态,让自己尽快提升一个高度,特在此共勉!