如何写好面向新人的开发文档

前言

大家在进入公司的时候,或多或少会接触到公司或者来自前辈的文档。文档水平层次不齐,好的事无巨细,层次清晰,拉跨的可能就像正确的废话,正确的说了正确的话。文档形式也是多种多样,word、markdown、云文档、知识库等等,我觉得这东西最好上云,好修改好共享。我公司呢,是有个知识共享文档平台供大家发文互相分享,但你懂的,这玩意上一次更新在八月一。更新频率低就是很大的问题了,而且文档质量嘛,也只能说一般,除了必要的一些中间件和框架简要说明,和一些架构说明还算有点意思,其他的还不如平时看的技术公众号文章。基于种种原因,我选择自己来写一篇开发文档,真正的开发指导说明书,拿着能用的那种。

文档迭代过程

最开始想着要写文档,纯粹是一腔热血,我来创造我来写。反正就开始了,刚开始写的很简单啊,因为就是我一个人看,相当于一个我的一个快捷开发备忘录,都是我自己的一些小套路。后来我写了自己的spring boot starter,当时想着要规范一点放到Github上,就写了一个Wiki。21年中的时候写了一个单点登录组件,为了让大家能用明白,就写了一个使用说明。后来我想着要统一技术组件,就把我自己的工具组件的说明合起来变成了一个初版的开发文档。
初版比较简单,就是一些常用的开发工具以及单点登录组件的解析,更多的还是靠口口相传或者开发者自身的能力。慢慢的我开始做统一的技术规划,因为这个门户网站,属实是需要一套统一的技术架构,不然错误莫名其妙,不同的人会出现不同的问题,我就一个人疲于奔命,独木难支。所以我做了一个开发模板放到Devops平台,主分支是我的,大家可以在上面二开,并且对开发文档进行了扩展,更多维度的提供开发建议和开发样例。对必要以及基础的模块做了统一的开发规范,比如Excel的相关操作。同时增加组件的引入,从源头控制开发工具的版本以及规范,比如redis编码、Kafka生产和消费。
完成了以上的工作之后,此时将开发文档更名为开发百宝箱。为啥这么改名呢?是因为我觉得我想提供给大家的是能开箱即用的实用工具,而不是一些没啥卵用懒得看的规范或者废话。规范这东西我希望能从框架或者组件去控制最好,不能仅仅依靠开发自身,比如我自己就会不想规范随便写,一着急了BUG频出也很正常,规范这东西我放在那里想起来了我看一下,记住了就记住了,用不用那不一定。现在开发百宝箱已经属于组内必看文档,新人来了先看,能快速了解技术架构以及扩展组件的技术栈和用法,配合老项目和同事带能一两天内迅速上手开发,效果还是比较好。同事有问题问我,我也是让他先看开发百宝箱,实在没有了我才帮忙处理,如果有必要我也会添加到开发百宝箱中,作为问题记录。

文档正文书写

规范和环境配置

开发肯定是要用规范的,没有规矩不成方圆,开发的良好素质就来源于对规范的理解和应用。好的程序员一定能写出大家都能看懂的代码,大家都能看懂,那就需要一套行之有效的规范,这里我首推阿里的开发小册,非常详细。在此基础上可以增加一些公司独有的规范,比如安全、代码质量,这里简要提几个点,从公司开发规范摘出来的。环境配置肯定是必须的,不然谁知道你要怎么玩,又不是开源项目,肯定会有一些保密或者瞎逼操作。不写出来,谁知道怎么开发项目,万一岔劈了,不是白干了。

  • 开发环境配置—JDK版本、集成公司框架、集成公司开发环境
  • 软件开发过程中的注意事项和规范要求—代码规范、数据库规范、组件引入规范、单点登录规范、代码质量分析
  • 如何测试—单元测试和功能测试、测试工具
  • 如何部署—Devops操作指南,模板项目
  • 如何发布上线—这个值得单独拉出来,毕竟谁也不喜欢生产事故
  • 运维记录—比如禅道或者飞书企微自带的一些记录工具

如何创建一个新项目

其实这个还是蛮重要的,值得单独领出一个模块来好好写写,图文并茂最好。下面提几个要点,当然这也看公司的技术基础设施完整度,根据公司情况写即可。

  1. 新建服务—这个需要项目负责人申请,在注册平台去注册服务,填一堆服务的基本信息以及负责人的信息
  2. 新建应用—使用Devops平台的模板项目去初始化项目,填一些服务的基本信息
  3. 环境配置—Devops上面的部署环境配置等等
  4. 拉取代码—这一步就是在模板项目上定制化修改,标注下哪些配置需要修改,可以改成啥样

说的比较简单啊,其实会比较复杂,看公司。比较好的就是一键全解决,做的粗糙的可能就是每一步都得人看着,稍不留神就弄错了。

模板项目

  • 模板地址—模板的下载地址以及使用方式
  • 模板分支—标注分支作用,比如master就是主分支,由我来做持续更新,其他人根据规范在主分支基础上建立新分支
  • 模板依赖—注明重要依赖的作用以及版本号
  • 模板包结构—提前建好包结构,并在文档注明,比如service、controller、mapper
  • 模板基础功能—模板提供什么样的基础功能,已经内置了哪些东西。比如公司框架、扩展组件
  • 模板通用案例—一些提示性的案例,比如controller怎么写、异常怎么处理、远程调用怎么写

常用开发工具框架介绍

这个就是一些推荐用的工具或者框架的简单介绍和使用方法,可以贴一下官网或者粘贴一些代码中的真实案例辅助开发同事理解运用。下面推荐一些我常用的小工具

  • 参数校验—@Valid和@Validated,Hibernate-Validator提供实现,Spring boot集成注解式校验,配合全局异常监听使用更佳
  • 缓存应用—我个人推荐本地缓存用Caffeine,远程缓存用Redis+操作框架Redisson
  • 加密工具—当然是推荐Jaspyt啦,配置加密正常加密都可以
  • 导入导出—EasyExcel已经牛上天了
  • 代码生成—ORM框架我们用的是Mybatis,增强框架我用的是Mybatis-Plus,所以代码生成也是用它自带的,生成模板我稍微改了改。

单点登录

单点登录这一块之所以单独列出来是因为属于基础组件。我希望开发同事能不仅仅知道怎么用,还要知道里面的设计原理,一旦发现问题能够自己通过源码找问题,而不是一个劲的问我。在刚开发完单点登录模块发布测试的时候,包括后面上线后,直到现在也还是不断地有人问我相关问题。恰逢公司更新新网关,两者叠加导致问题频出,有写错的也有程序错误的,有我的也有网关的BUG,找起问题来特别麻烦。为了我自己梳理单点登录逻辑,也为了同事们少给我整点活,我选择写一篇详细的设计文档出来,后端思想-单点登录组件的设计与思考。(⊙﹏⊙),写完了之后吧,要说有效果吧,好像有点又好像没有,对我有点用,同事依旧直接问我,摆烂。这个模块我是这么写的

  • 设计思路介绍—就是贴了下链接,里面有我的设计流程图、思路、自问自答和版更记录
  • 使用方法—依赖和配置项,比如配置某个接口跳过单点登录
  • 内置实用工具介绍—比如如何获取当前登录人的信息

中间件使用

这一块主要是针对引入的中间件做一个配置和使用说明,因为做了本地化改造,所以还是有必要说说怎么用的,需要配置什么参数。我是引入了分布式事务Seata、定时调度Elastic-Job和我自己设计开发的日志收集系统。

  • 环境概述—主要写清楚中间件的部署情况,有没有环境隔离,部署在哪个服务器,几个节点这种基本情况。
  • 配置说明—常规的就是配置文件中增加配置项,特殊的比如Seata需要额外在数据库增加表
  • 使用方法—给个图文并茂的例子,描述清楚怎么用。代码怎么用,部分有控制台的怎么用也要讲明白
  • 项目依赖—这个主要是写一下中间件引入时自带了什么依赖,为了避免依赖版本冲突,还是有必要写一下的
  • 注意事项—我自己写一些使用的注意事项以及官网的提示,再补充同事在使用时遇到的问题
  • 版更记录—一般中间件还是要本地化改造的,主要是为了统一开发规范,因此组件的版更记录要写下来给有需要的人看

技术工具组件

这个就没啥套路了,就是版本更新记录、使用说明之类的。就重点说说,我提供哪些工具,详细的可以看这篇文章,Spring Boot Starter开发指北(案例+代码地址)。

  • Redis工具—推荐用Redisson操作框架,我写了些初始化配置,内置了一些默认参数。
  • OA信息查询API—一个静态API调用类,主要是远程获取公司HR信息
  • 消息通知API—静态API调用类,内置了对公司邮件、通讯工具API的封装和默认配置,带点业务封装
  • Spring工具类—常见的获取Bean之类的小工具
  • 数据脱敏—封装Jasypt,对接口入参出参和配置文件的加密解密,同时扩展Mybatis插件进行ORM层的加密解密
  • 缓存工具—将SpringCache替换为Redis,增加默认参数配置。同时提供通用配置的Caffeine
  • 业务小工具—发号器、限流器、幂等性校验器
  • 线程池配置—提供基础的CPU和IO型的线程池对象,动态线程池引入外部框架

业务工具组件

  • 数据校验优化—开启Validated快速失败机制,提高校验速度。
  • Mybatis Plus配置—常规配置封装,扩展插件例如自动注入字段
  • Excel工具—该模块设计详见往日文章
  • 异常规范—异常类、错误码、全局异常监听

解决方案汇总

这个部分就是我之前写的那些有意思的设计文章或者解决疑难杂症的文章,发出来让大家思考,同时给我反馈促进大家进步。比如之前的写SQL优化的从零开始的SQL修炼手册-实战篇,多线程开发的性能优化-如何爽玩多线程来开发,就不多发了,喜欢的可以翻翻我之前的文章。

写在最后

回头看下来,感觉这个结构还是井井有条的,希望对大家的文档有所帮助。我最开始进公司的时候,还没有这些文档,可能算有个雏形,规范是有的,但是对新人来说意义并不是很大,我要的是具体怎么做,就这么简单。此后经历了痛苦的成长期,比如基本没人带我,纯靠自学,正式上班第三天开始开发新项目。于是我开始厚着脸皮问身边的前辈们,因为没有可靠的文档,纯靠口口相传和看老项目代码,让我非常难受,又菜又急。
所以平时我就记录下问题,慢慢总结积累,后来过了一两年我就开始琢磨着写一个正式的开发文档,因为组内迟迟没有,所以我一开始没打算公开,男生自用来着。团队内部工作压力也是很大,从我来了之后,三年了,没有新的应届生,只招社招的,我成了我们团队最后一届应届生,也是离谱。莫名其妙的,开始有同事问我问题,找我解决疑难杂症,太多而且重复性较高,忍不了了,就把文档发出来放到大组内,方便整个大团队的技术架构统一。效果还是蛮好的,离谱且重复的问题少了很多,一句看文档就能解决很多问题,写这篇文章也是记录下我写开发文档的整个过程,留个记录。如果能对相同困境的读者有所帮助,那是再好不过了。下一篇,应该是难点的盘点了,这个比亮点感觉还难写,折磨。最近新项目还要学习一些新技术,写文时间再次压缩,那就半个月后见吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/508154.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】java项目—苍穹外卖day06

文章目录 苍穹外卖-day06课程内容1. HttpClient1.1 介绍1.2 入门案例1.2.1 GET方式请求1.2.2 POST方式请求 2. 微信小程序开发2.1 介绍2.2 准备工作2.3 入门案例2.3.1 小程序目录结构2.3.2 编写和编译小程序2.3.3 发布小程序 3. 微信登录3.1 导入小程序代码3.2 微信登录流程3.3…

详解ExecutorService 和 Executors

代码示例: ExecutorService 表⽰⼀个线程池实例. Executors 是⼀个⼯⼚类, 能够创建出⼏种不同⻛格的线程池. ExecutorService 的 submit ⽅法能够向线程池中提交若⼲个任务. ExecutorService pool Executors.newFixedThreadPool(10);pool.submit(new Runnable() {Overri…

算法系列--递归,回溯,剪枝的综合应用(1)

💕"对相爱的人来说,对方的心意,才是最好的房子。"💕 作者:Lvzi 文章主要内容:算法系列–递归,回溯,剪枝的综合应用(1) 大家好,今天为大家带来的是算法系列--递归,回溯,剪枝的综合应用(1) 1.全排…

Multisim14.2仿真参数的修改

本内容讲述Multisim14.2仿真参数的修改,以放大倍数修改为例说明。紫色文字是超链接,点击自动跳转至相关博文。持续更新,原创不易! 目录: 1、三极管放大倍数的修改 2、Uc的电压计算 1、三极管放大倍数的修改 在仿真…

2024第16届成都实验室装备展6月1日举办

2024第16届成都实验室装备展6月1日举办 邀请函 主办单位: 中国西部教体融合博览会组委会 承办单位:重庆港华展览有限公司 博览会主题:责任教育 科教兴邦 展会背景 现代高新技术与基础科学实验研究对科学仪器的先进性、稳定性、性价比等…

【BlossomRPC】接入注册中心

文章目录 NacosZookeeper自研配置中心 RPC项目 配置中心项目 网关项目 这是BlossomRPC项目的最后一篇文章了,接入完毕注册中心,一个完整的RPC框架就设计完成了。 对于项目对注册中心的整合,其实我们只需要再服务启动的时候将ip/port/servic…

2024阿里云服务器ECS u1实例性能测评_CPU内存_网络_存储

阿里云服务器u1是通用算力型云服务器,CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器,ECS通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xf…

Php_Code_challenge13

题目: 答案: 解析: 开启一个会话,在SESSION变量"nums"为空时则对"nums","time","whoami"进行赋值,并在120秒后关闭会话,创建一个变量"$value"…

2024051期传足14场胜负前瞻

2024051期售止时间为4月2日(周一)22点00分,敬请留意: 本期深盘多,1.5以下赔率2场,1.5-2.0赔率2场,其他场次是平半盘、平盘。本期14场难度中等偏上。以下为基础盘前瞻,大家可根据自身…

Hamcrest断言框架

一、Hamcrest简介 Hamcrest源于Java,支持多种语言,是用于编写匹配器对象的框架,可以更灵活的定义“匹配”规则。Hamcrest 断言,基于更灵活的 Matchers 断言方式。 二、Hamcrest安装 可以使用常用的python打包工具来安装Hamcres…

电商技术揭秘二:电商平台推荐系统的实现与优化

文章目录 一、推荐系统的重要性1.1 提升用户体验1.1.1 个性化推荐增强用户满意度1.1.2 减少用户选择困难 1.2 增加销售额1.2.1 促进交叉销售和捆绑销售1.2.2 提高用户购买转化率 1.3 数据分析与用户行为理解1.3.1 挖掘用户偏好和购买习惯1.3.2 为产品开发和库存管理提供数据支持…

思考: 什么时候需要disable MMU/i-cache/d-cache?

快速链接: 【精选】ARMv8/ARMv9架构入门到精通-[目录] 👈👈👈 在armv8/armv9的aarch64架构下,软件的启动流程: BL1--->BL2--->BL31--->BL32--->BL33.... 在不同的BL镜像切换时,都需要disable …

943: 顺序表插入操作的实现

学习版 【C语言】 需要扩充数组 【C】 #include <iostream> #include <vector> #include <algorithm> using namespace std; class MyLinkedList { public:struct LinkedNode{int val;LinkedNode* next;LinkedNode(int x) :val(x), next(NULL) {}};MyLin…

切换ip地址的app,简单易用,保护隐私

在数字化时代&#xff0c;IP地址作为网络设备的标识&#xff0c;不仅承载着数据在网络间的传输任务&#xff0c;还在一定程度上关联着用户的隐私和安全。因此&#xff0c;切换IP地址的App应运而生&#xff0c;为用户提供了一种便捷的方式来改变其网络身份&#xff0c;实现匿名浏…

制造业需要有品牌力和生命力的产品,CRM能做什么?

以往谈及制造业的数字化转型&#xff0c;生产制造环节往往是重点。但从中国制造走向中国创造&#xff0c;需要有生命力和品牌力的产品。全面推进制造业高质量发展&#xff0c;须重视客户与营销环节的变革&#xff0c;将客户与产品有效连通&#xff0c;实现价值升级。 大连冶金…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…

LeetCode-热题100:48. 旋转图像

题目描述 给定一个 n n 的二维矩阵 matrix 表示一个图像。请你将图像顺时针旋转 90 度。 你必须在 原地 旋转图像&#xff0c;这意味着你需要直接修改输入的二维矩阵。请不要 使用另一个矩阵来旋转图像。 示例 1&#xff1a; 输入&#xff1a; matrix [[1,2,3],[4,5,6],…

1236. 递增三元组:做题笔记

目录 暴力 代码 二分 代码 前缀和 代码 推荐视频讲解 暴力 这道题说的是有三个元素数量相同的数组&#xff0c;想知道有多少个三元组满足&#xff1a;三个数分别来自 A B C数组且呈现递增。 我想的是既然要求递增&#xff0c;那就先把数组数据都排一下序&#xff0c;…

行车记录打不开?别慌,数据恢复有高招!

行车记录打不开&#xff0c;这恐怕是许多车主都曾经遭遇过的烦恼。在驾驶途中&#xff0c;行车记录仪本应是记录美好瞬间、保障行车安全的重要工具&#xff0c;但一旦它出现打不开的情况&#xff0c;所有的期待与信赖便瞬间化为乌有。面对这种情况&#xff0c;我们该如何应对&a…

HQL,SQL刷题,尚硅谷(初级)

目录 相关表数据&#xff1a; 题目及思路解析&#xff1a; 多表连接 1、课程编号为"01"且课程分数小于60&#xff0c;按分数降序排列的学生信息 2、查询所有课程成绩在70分以上 的学生的姓名、课程名称和分数&#xff0c;按分数升序排列 3、查询该学生不同课程的成绩…