前端进阶之路: 前端架构设计(2)-流程核心

可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视, 早在开发工作启动之前, 他们就被邀请加入到项目中, 而且他们会跟客户讨论即将建成的平台的架构要求, 使用还什么技术栈? 内容类型是什么? 这些内容如何被创建?软件架构师的职责就是要保证项目中每一步都在总体架构的指导下进行, 而不会随机决定.

前端进阶之路: 前端架构设计(2)-流程核心_第1张图片
前端架构

现在的前端领域, 随着JS框架, UI框架和各种库的丰富, 前端架构也变得十分的重要. 如果一个大型项目没有合理的前端架构设计, 那么前端代码可能因为不同的开发人员随意的引入各种库和UI框架, 导致代码量变得异常臃肿, 最终结果可能是代码变得无法维护, 页面性能低下,不得已只能推翻重构. 所以我们需要在项目开始前, 同样的需要对前端代码进行架构, 一旦前端架构师设计出所有前端开发人员都要遵循的检验机制, 建立起系统设计的规范, 那么项目就拥有了可以衡量代码质量的标准, 前端开发人员也能享受到更高效的工作流. 所以, 前端架构的定义可以用以下一句话来总结:

前端架构是一系列工具和流程的集合, 旨在提升前端代码的质量, 并实现高效, 可持续的工作流.

本系列的前端架构文章, 将分别围绕前端架构的四个核心展开, 分别是代码, 流程, 测试, 文档.

前端架构的四个核心

(一) 代码

归根到底, 所有的网站都是由一堆文本文件和资源文件组成的. 当我们面对制作网站所产生的大量代码时, 就会发现为代码和资源设定一个期望是多么重要. 在代码部分, 我们会专注于如果实现系统架构中的HTML, CSS, JavaScript.

(二) 流程

现在早已过了FTP上传文件的时代, 那么现在重要的是思考怎么用工具和流程构建一个高效且避免出错的工作流. 工作流变得越来越复杂, 那些用于它们的工具也同样如此. 这些工具在提高生产力, 加快效率和保持代码一致性上带来了惊人的效果, 但也伴随着过度工程化和抽象化的风险. 所以, 现有的工作流是需要改变的.

(三) 测试

要构建一个可扩展和可持续优化的系统, 必须保证新代码和老代码能够很好的兼容. 我们的代码不会独立存在, 它们都是大型系统中的一部分. 创建覆盖面广泛的测试方案, 能确保老代码还能正常运作.

(四) 文档

一般而言, 如果不是团队中的重要成员要离开, 我们几乎都不会意识到文档的重要性. 等到那个时候, 大家将不得不停下手头的工作, 优先编写所有的文档. 作为前端机构师, 你要善于在项目开发的同时编写良好的文档.

流程核心

现在的前端工作流程已经发生了很大的改变, 最开始的Web开发阶段, 一般的工作流程是根据邮件交流来理解客户的需求, 然后通过FTP登录他们的服务器, 对网站代码做必要的修改. 这种做法是非常不成熟的. 如果误解了邮件的内容, 改错了代码, 会发生什么呢? 如果修改了一部分css代码, 导致破坏了很多页面的布局呢? 如果我改掉一个JavaScript的bug, 但又引发两个bug呢?

经过多年的项目开发, 现在已有了一整套成熟的开发流程, 一般公司的开发流程为以下几个步骤:

前端进阶之路: 前端架构设计(2)-流程核心_第2张图片
现代开发流程图
  1. PM(产品经理)提出需求,并和开发人员讨论需求的具体细节和可行性
  2. 需求确定之后, 发布出原型图和需求文档
  3. 开发人员根据原型图和需求文档进行开发, 前端还需要UI(网页设计人员)提供设计图, 项目总监使用JIRA等项目管理工具来跟踪工作流
  4. 搭建测试环境来测试代码, 开发人员完成功能开发并自测通过后, 提交给测试人员进行测试
  5. 测试人员和需求方通过后, 将代码合并到远程的master分支, 并部署上线

下面将分别从每个步骤讨论其它们在现代化开发流程中的必要性:

(一)需求

提出需求是进行开发的初始工作, PM提出了明确的需求后. FE(前端开发人员)才能进行开发. 当然, 互联网行业中对于提出需求是否需要开发人员参与讨论是有不同的争议的, 有的人认为让开发人员参与需求阶段, 可能会因为开发人员的技术认知水平和惯性思维等因素, 限制PM提出一个有创意的需求. 也有的人认为应当让开发人员参与需求讨论, 因为可能因为PM完全不懂技术, 导致提出根本无法实现的需求.

毫无疑问, PM比起开发人员更加懂得需求, 因为他们会在告知开发人员需求之前完成需求收集, 需求描述, 需求全景图, 需求分析, 用户故事等一系列专业化的工作 . 但我赞同开发人员同时也在需求上能有一定的话语权, PM在需求表达阶段让UI, FE, BE(后端开发人员)参与讨论, 不仅能让开发人员更好的理解需求, 也可能让PM发现一些忽视的点, 从而更好的提出一个完整的方案.

(二)原型

原型图是现代开发流程中不可或缺的一环, 它对于项目中的每个角色都有着重要的意义:

  • PM进行需求验证的方式: PM在使用Axure画原型图的过程也是自己构思产品的过程, 经过原型图能够使得PM更加的理解产品.

  • 给需求方确认需求的工具: PM理解的需求可能和需求方的需求是有出入的, 设计出原型图作给需求方来验证需求的正确性是十分必要的.

  • UI设计出设计图的依旧: 原型几乎有了整个界面的雏形, 拿到原型图后, UI能够更好的根据原型图和PM讨论其设计样式, 更快的交付出设计图给FE, 极大的降低了沟通成本.

  • 开发人员开发的依据: 初级的前端可能只会拿着设计图进行切图, 很可能切完图之后, 发现功能完全添加不进去的情况. 有经验的前端都会同时拿着设计图和原型图进行开发. 通过设计图在写htmlcss的同时通过原型图去写js的业务逻辑部分. 同时, 原型图也是后端开发人员提供业务接口的依据.

  • 测试人员测试的依据: 作为一个现测试人员,可以从原型快速了解产品的核心功能,和页面大致展现形式,方便测试人员提早了解需求,评估需求,制定测试计划,分配测试任务,然后各自开始编写测试用例

可以说, (一)(二)步骤是前端开发人员进行开发的前提, 原型其实也是为项目中各角色更好的理解需求而服务的. 下面, 我以一个例子, 来解释一下什么叫做真正的理解需求.

需求场景假设

加入现在有个论坛的项目, 产品经理小C提了个需求"给论坛增加评论功能". 作为前端工程师的小A接到需求后, 该如何高质量的完成这个需求?

  • 项目名称: 兴趣论坛
  • 项目主要成员: 前端工程师小A, 后台工程师小B, 产品经理小C
  • 产品需求: 给论坛增加评论功能.

此时, 小A接到需求后, 脑海里可能浮现的是下面这张图:

前端进阶之路: 前端架构设计(2)-流程核心_第3张图片
评论功能
需求明确和需求确认

可能一些同学听到需求后, 就着手开始进行开发了. 不就一个简单的评论功能吗? 一个