磨刀不误砍柴工,分享编写前端技术设计文档的二三经验

举报
叶一一 发表于 2023/12/27 10:03:14 2023/12/27
【摘要】 前言我从2021年开始编写前端开发设计文档至今,粗略数了数,已经有60+篇文档。这期间,从文档标题到文件分类都有了细微的变化。文档标题上:我和上线单的标题对齐了,如何可以区分版本的,我会加上当期版本。文件分类上:我区分了业务场景分类,方便快速找到某一期的需求。文档内容上:最开始主要包含三个方面:任务拆分、功能设计、开发排期。随着经验的积累以及对他人经验的学习,我在设计文档的内容上做了升级,下...

前言

我从2021年开始编写前端开发设计文档至今,粗略数了数,已经有60+篇文档。

这期间,从文档标题到文件分类都有了细微的变化。

  • 文档标题上:我和上线单的标题对齐了,如何可以区分版本的,我会加上当期版本。
  • 文件分类上:我区分了业务场景分类,方便快速找到某一期的需求。
  • 文档内容上:最开始主要包含三个方面:任务拆分、功能设计、开发排期。随着经验的积累以及对他人经验的学习,我在设计文档的内容上做了升级,下面会详细介绍到。

这些变化和调整的最终目的,是为了阅读设计文档的人,能够更精确的了解当期设计重点,以及清楚全部的任务,进而帮助我更好的评估开发时间。

我最近阅读了一篇大佬写的文章,有了新的感悟,并在最新的一期的设计文档中做了局部调增。再加上最近翻阅之前的文档,总结了几点经验。

年末了,正好汇聚成一篇文章,跟大家分享交流一下。

为什么能坚持编写设计文档?

我之前曾经写过一篇《大型业务项目中,前端如何撰写设计文档》的文章,其中有关于「为什么推荐写设计文档」的部分。

我们先来回想一下最近的一次需求,下面几个问题,能回忆起几个:

  • 哪些功能是相似的?相似功能有没有做通用处理?
  • 哪个功能实现起来有难度?最后是怎么解决困难点的?
  • 主业务流程是什么?有几条不同的业务流程?业务代码设计的可扩展性怎么样?
  • 新增了几个公共组件?用途分别是什么?
  • 老代码有改动吗?新老代码的兼容性是怎么处理的?
  • 有没有全新的、以前从没接触过的业务概念和体系,是如何应对全新业务的?
  • 有没有连带功能?连带功能的覆盖范围是哪些?

......

产品视角的需求文档,需要在哪些地方做什么样的功能提供给用户。

开发视角的需求设计,不但要梳理清楚具体功能、功能所在的位置,还要考虑代码的质量。程序开发,不是单纯的代码堆砌。所以在技术论坛上了,我们可以看到很多优秀的“如何实现某类功能”的文章。

设计文档是帮开发梳理业务功能,呈现优质的开发思维的载体。另外,当开发思路逐渐丰富,开发速度也就提上来了。

之前着重阐述了“为什么推荐写设计文档”这个话题,主要是围绕着“任务拆分”和“代码设计”这两个方面。

诚然,这两个方面是重中之重。但是随着业务的复杂化,迭代的快速化,只关注这两个方面显然不能满足全部场景,为了更好的应对挑战,编写设计文档,成为了开发前的必经之路。

更好的应对挑战,也是我能坚持编写设计文档的主要原因。

接下来,我来理一理开发路上都有哪些挑战。

文档写得好,排期才能快、准、稳

1、通常RP里,越是一句话的需求,越要打起十二分精神。

比如某期中,下面这个需求,甚至都没有直接体现出来新增之后的使用场景。

请在产品配置增加一个渠道类型。

于是,开发问了一句“新加的类型怎么用”,便有了接下来的1/4任务。

设计文档的任务拆分,应对遗漏开发和遗漏排期的良策也。任务拆的对,少走至少5个工时的弯路。

2、想要代码质量好,功能说明同样重要

功能说明(也可称为功能描述)可以将原本复杂的流程化繁为简。


业务散的满天星,文档把它聚成一团火

1、RP也不是无所不能的,偶尔口头的需求或者群里确定的功能点,还是得靠设计文档才能把功能点记录的明明白白。

比如下面这种情况,如下截图,需求是将现有的「是否用户订单」改成「订单方式」,同时枚举值也一并更新。

看上去没什么难度,但是其实忽略了一点,就是原来的枚举值是:是和否。

于是我们便在业务群里确认这一点。

看对话时间,还好是今年10月份的,如果更久的聊天记录,找起来就十分麻烦了。

而我一般找功能,会先看代码的更新时间,我的更新记录中一般会带上当期版本信息。

我找到当时的设计文档,就能轻松的找到需求修改前后的对应关系。

总结就是,设计文档更的勤,陈年的芝麻好捡

2、好记性靠不住,烂笔头才是真绝色

代码里有一个重新获取支付的功能,这功能的交互具体是怎么重新请求?要读会代码才能知晓。(当然直接加一段交互注释也不是说不行。)

但是,设计文档中标注好交互描述也是一个不错的选择。

3、随时随地,一键搜索任务关键字

工具往往有一些很便捷的功能,比如搜索。

如果我想找到某一期关于保司推送的功能,只需要搜索关键字,就 可以很方便的找到包含推送的开发设计文档。然后在进一步精准定位。

WechatIMG4699.png

闲来读一读,温故而知新

偶尔翻阅之前的开发设计文档,读读之前的设计方案,有时候会新的灵感。子曰:“温故而知新,可以为师矣。”

年末的设计文档分享

大型业务项目中,前端如何撰写设计文档》一文中,有一个章节专门介绍设计文档写什么,我重读一遍,发现写的略微宽泛,不够精炼,我重新总结一下。

Part1:相关文档

1、主要包括但不限于

当期需求的RP、当期需求的Wiki上线单、在线设计稿(非必需)。

2、当期需求的RP和当期需求的Wiki上线单

有时候RP不止一个,所以放到设计文档中,可以更快速便捷的找到。

3、在线设计稿(非必需)

Part2:任务拆分

1、主要包括单不限于

任务归属、任务细分、估算开发时间、里程碑(非必需)。

2、任务归属和任务细分

大部分前端任务都可以找到对应的操作界面。

3、估算开发时间

估算的开发时间时,我一般是以页面为估算维度,同时会依托于功能设计中的复用关系,以便排期更准确。

此外,对于交互,还需要在基础功能上,额外加上开发时间,一般会加20%~30%;对于UI,则需要单独评估UI还原的时间。

4、里程碑(非必需)

如下图是一个项目进度计划的甘特图,甘特图又叫横道图,是展示进度信息的一种方式,包含关键的里程碑。仅供参考。

WechatIMG4700.png

注:里程碑对于大型开发还挺有帮助的,它标志着项目中的重要时刻,可以帮助开发者判断当前进度是否符合预期,如果有意外偏移,可以及时进行调整。

Part3:功能设计

1、主要包括但不限于

功能说明、实现方案、流程图、其他影响(非必需)。

2、功能说明

有时候功能说明总结出来了,实现方案也就八九不离十了。

比如支付优惠的设置,RP罗列的十分详细,一目了然。但是我们在做开发设计的时候,是需要进行归纳的。

用户类型

订单类型

支付优惠方式

普通用户

普通

优惠配置-普通

普通用户

拼团

优惠配置-拼团

会员用户

普通

优惠配置-普通

会员用户

拼团

优惠配置-拼团

尊享用户

普通

优惠配置-普通、尊享优惠

尊享用户

拼团

优惠配置-拼团、尊享优惠

企业用户

普通

优惠配置-普通、企业优惠

企业用户

拼团

优惠配置-拼团、企业优惠

这时候,功能说明就排上用场了。上面这个详细的表格,归纳成功能说明,就是下面的三句话,一目了然。

1、所有用户根据用户类型和订单类型配置对应支付优惠方式;

2、如果用户类型是尊享用户,则需要新增“尊享优惠”的支付优惠方式;

3、如果用户类型是企业用户,则需要新增“企业优惠”的支付优惠方式

3、实现方案

实现方案可以帮助保障代码质量,同时也帮助前后端提前了解并确定数据的结构。最好包含功能实现的伪代码,有助于阐述逻辑

上面支付优惠的伪代码:

/**
   * 通过不同订单和用户类型的优惠方式
   * @param {Object} param 订单和用户信息
   * @return {Array} 返回的支付优惠方式
   */
  getEmployerPayTypeListByData(param) {
    const { orderType, userType, configPayDiscountMap } = param;
    let payDiscountTypeList = configPayDiscountMap[orderType][userType];
    const customizedMap = {
      exclusive: 3, // 3-尊享优惠
      enterprise:4, // 3-企业优惠
    }
    // 如果用户类型是尊享用户或企业用户 优惠方式需要新增一种
    if (userType === 'exclusive' || userType === 'enterprise') {
      const customizedDiscountTyp = customizedMap[userType];
      payDiscountTypeList.push(customizedDiscountTyp)
      
    }
    return payDiscountTypeList;
  }

此外,对于复杂的功能,还会有多方面考虑,比如:某些复杂的交互,可能浏览器实际能实现的与产品预想的有偏差,这时候可以提供多个备选方案,供产品挑选。

逻辑和UI的复用,我会在设计文档里面独立开辟一块内容,帮助了解哪些功能不需要重做,哪些可以为今后所用。

4、流程图

一般复杂的流程,产品原型里都会附上业务流程图。

但是对于前端来说,其实还有一个交互流程和业务流程图略有不同。

梳理清楚业务流程,方便编写功能说明和设计功能方案。如下是沪家保理赔的查勘任务交互流程图:

理清楚交互流程图,操作步骤也就明了了。

5、其他影响(非必需)

有时候,开发做代码重构的时候,会修改或删除一些旧代码或接口。这些改动,最好详细记录一下影响范围,方便测试同事帮忙测试。

Part4:上线配置

1、主要包括但不限于

页面权限配置、定制数据。

2、页面权限配置

一般对于第三方的页面是需要特殊的页面权限配置的。

3、定制数据

还有一些定制的数据,比如之前的特定的页面样式需要定制化,所以就需要定义清楚究竟有哪些数据是需要配置的。

总结

总结一下本文的核心内容:

  • 编写技术开发文档,有助于开发者省时省力和保持质量的进行项目迭代。可间接帮助减轻延期风险。
  • 开发文档的内容不是一尘不变的,除了推荐的内容,可以精益求精,根据需要添加可以帮助自己开发的内容项。

年末,能在对过去一年做一个简单的总结,怎么不算一种额外的收获呢。

最后,2024龙年,预祝大家,编程更顺利,技术更精湛。


作者介绍
非职业「传道授业解惑」的开发者叶一一。
《趣学前端》、《CSS畅想》等系列作者。华夏美食、国漫、古风重度爱好者,刑侦、无限流小说初级玩家。
如果看完文章有所收获,欢迎点赞👍 | 收藏️ | 留言📝

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。