资源管理与组织

前端的资源管理域组织是一个很复杂的问题。为什么这么说呢?因为往往在不同的项目中,由于项目属性或者需求的不同,可能对前端开发的要求是不一样的。同时,正是由于这样的一个原因存在,它可能会影响前端开发的方方面面。

举几个例子。

如果一个项目是一个偏展示和交互的web项目,比较追求用户体验与交互。那么面对这种情况,我们可以采用将后端抽象成服务化的后端,大部分的交互和数据展示逻辑都交给前端来处理这种做法。

如果一个项目是一个纯展示类,比如大部分都是静态页面。那么面对这种情况,我们可以采用后端吐出模板直接渲染的做法。

如果一个项目是一个webapp,那么我们可能会考虑引入Single Page Application的思路

等等。

如前所述,针对不同属性的项目,我们考虑前端的技术选型以及实现方式的出发点是不太一致的。但是尽管如此,不同的实现方式仍然会有一些共性的东西可以抽象出来。包括

  • 文件组织结构
  • 资源管理方式
  • 前后端协作模型

文件组织结构

从大的方向上来说,文件的组织结构往往分为两种,一种是项目代码不分前后端,而是按照文件功能划分。典型的一种管理方式如下,

- protected
--- models
--- controllers
--- views
- public
--- js
--- css
--- img

如上所述,protected是后端的服务目录,其会按照某一种典型分层结构来管理,比如MVC分层结构。而public是静态资源的目录。

这种目录管理方式通常出现在一些传统的项目中。从某种意义上来说,这是一种将前后端职责混淆在一起的模式。换言之,它可能就没有考虑到前后端分离的问题。在实际的开发中,会经常遇到这样一种问题,就是开发人员职责不明确的问题。业内所谓的“套模板”就是这样模型下衍生出来的产物。

那么,另一种模式,也就是近两年才逐渐火起来的前后端分离思想。指的是在项目起步初期,在可以预见项目未来迭代发展的情况下,会做一些分离的考虑。其核心思想是让合适的人做合适的事。换言之,尽量避免开发人员职责不明确的问题。

但是这种模式具体很强的可适性,即不是所有的项目都是能够往这种模式上套的。就目前来说,这种模式仍然是出于一个探索的阶段,所以并无统一的文件结构可以直接套用,大部分还是需要根据自己项目的特点来进行管理。

额外提一点,基于前后分离的思想下,如果项目的前端足够重的话,是完全可以从项目的层面上将前后端独立开的。即前端是一个独立的子项目,后端也是一个独立的子项目。此时后端是服务化的高度抽象,相比其他的模型,它的输出可能就是一些api接口,或者是数据服务。而此时前端的工作内容将会有一点的延伸,需要负责更多的内容,比如路由设计等等。

资源管理方式

仅从前端层面来说,资源管理一直以来有两种声音,

  1. 按照文件类型管理
  2. 按照功能模块管理

前者的含义是,简单的按照javascript,css,html等静态资源的类别分类管理,不同类别的文件放在一个文件夹下。如下,

- js
--- 1.js
--- 2.js
- css
--- 1.css
--- 2.css
- portal
--- index.tpl.html
--- user.tpl.html

后着的含义是,基于组件化的开发思想,将同一个组件的所有需要的文件都放在一起。如下,

- components
--- dialog
------ index.tpl.html
------ index.js
------ index.css
--- header
- aside
- navigate

这两种方式各有优劣。前者按照类别进行管理,简单无痛。但是在需要修改或者新增内容时,需要修改多个地方。后端基于组件化的思想,把每一种组件的所有需要文件都放在一起,避免了需要在多个地方修改的弊端,同时也利于组件复用和管理,不好的一点就是会产生比前者更多的文件数量。

就目前社区的发展来说,针对前端功能稍微复杂一点的项目来说,还是更加推荐使用后者。一个是因为组件化/模块化开发是趋势,再一个是更利于复用和管理。至于文件数量过多的问题,可以通过前端构建系统来解决。

前后端协作模型

在久远的刀耕火种时代,基本毫无前后协作可言。那时候的前端很轻,仅仅是面向用户那薄薄的一层,可能后端开发人员就直接搞定了。但是现在不行了,因为前端的发展正呈现出一个越来越重的趋势。它需要更加专业的开发人员来完成这项工作。

现在业内比较通用的一种前后端协作模式是这样的。

  1. 在开发之前,前后端商定好契约
  2. 契约最终将会以文档的形式输出
  3. 双方基于文档做隔离开发
  4. 开发完毕之后进行联调
  5. 若联调有问题,是否有必要修改文档
  6. 若有必要修改文档,则修改文档;
  7. 若联调复合最初期望,则可开始走发布流程

目前看来,这样一种模式是比较科学的。也能在绝大多数的项目场景下适用。