精选

复用 - 快速开发新产品的秘诀

在我最近发布的 鱼厂一周年复盘总结 中,提到了我们团队注重技术沉淀的理念。其中重要的一点就是:在开发产品时,我们尽可能地保证重复的功能只开发一次,以提高效率、降低开发成本。

有好学的小伙伴问:具体是怎么实现的呢?如何践行这种设计呢?

这个问题的确非常好,给大家简单分享一下我们快速开发新产品的秘诀。

其实有很多种提高开发效率、避免重复开发的方法,本质上都是 “复用”,我按照复用的粒度,从小到大依次给大家举例讲解。

1)代码级复用:对重复的代码进行复用,也许只是简单的几行代码。

举个例子,下面这段通过本地加锁让用户串行操作的逻辑,可以复用到很多逻辑中:

// 锁必须要包裹住事务方法 QuestionFavourService questionFavourService = (QuestionFavourService) AopContext.currentProxy(); synchronized (String.valueOf(userId).intern()) { return questionFavourService.doQuestionFavourInner(userId, questionId); }

针对这种逻辑单独封装方法又有些 “小题大做” 了,所以一般我们会给可复用的关键代码打上注释,或者用 IDEA 的 region 注释进行标识,要用到的时候复制粘贴即可。

可以使用我们开发的 剪切助手工具 保留所有复制过的代码,并进行分组,下次要粘贴时就能轻松找回。

2)函数级复用:将常用的功能逻辑封装成函数(方法)。比较典型的是 Service 类中的方法,比如 UserService 中编写一个获取登录用户信息的方法,很多类都可以调用;也可以将该方法复制粘贴到其他项目中。

3)类级别复用:将常用的一组功能封装为类或服务。比较典型的是工具类、数据访问层的 Mapper 和通用业务逻辑 Manager 类。比如获取网络请求的工具类 NetUtils、操作文件存储的服务等。

4)模块级复用:遵循领域驱动设计(DDD)的思想,很多项目都是可以拆分成多个模块的,每个模块都是可复用的功能单元。说人话,其实模块就是多个相关的类的集合。比如 AI 模块,可能包含了 AI 相关的 model 数据实体、调用 AI 的 API 请求工具类、组合上下文的历史管理类等等。

我们在做某个新功能时,首先会思考这个功能以后有没有可能会被复用,对于评估下来可复用的功能,我们会考虑首次在项目中开发时,就把和这个功能相关的代码都放到一个目录(包)下,而不是按层级分到 Controller、Service、Model 等包中。

刚开始这个模块可能只有当前项目使用,并不会做的很完善,其他项目也要用时可能是先通过复制粘贴的模式;等模块逐渐完善后,再考虑是否需要将该模块独立出来,供其他项目复用。

5)插件和 SDK 级复用:其实就是把模块单独抽离出来,封装为可直接引入项目的插件或者 SDK 依赖包。比如我们公司内封装了自己的 AI SDK、短信 SDK、企微消息 SDK、动态公告系统插件等。(动态公告系统是我们实习生开发的,在星球内分享了教程哦:https://t.zsxq.com/19491FHYf

对于大一点的公司,一般会有自己的私有 Maven 和 Npm 仓库,公司内的开发同学可以将制作好的 SDK 或插件上传到私有库,其他同事通过依赖管理工具,就能直接下载。

6)API 级复用:区别于必须要手动引入到项目中的 SDK 或插件,将功能封装为 API 接口供其他项目调用,会是一种更灵活、更解耦合的方式。比如我们将在线执行代码的能力单独部署到了一些服务器上,供所有项目一行代码调用。

有同学可能会问了:什么情况下要提供 API?什么情况下提供 SDK 呢?

一般在企业中,API 常用于跨团队开发的场景,典型的就是获取其他业务的数据、或者复用其他业务的能力。比如我们想在编程导航项目中获取到代码小抄项目中的代码数据,完全没必要把获取代码小抄数据的功能抽出来封装为 SDK,这个代价太大了,不如让代码小抄项目提供一个返回代码数据的接口即可。而 SDK 更适用于封装工具库,或者和数据无关的、业务解耦的能力。

当然,很多时候,我们会同时提供 API 和 SDK。比如腾讯云,不仅提供给开发者在线调用的 API,还提供了 SDK 来简化 API 的调用。

7)系统级复用:这是成本最高的、也是收益最大的复用,比如前端项目万用模板、后端项目万用模板等,每个新项目都可以基于模板快速得到很多基础能力,大幅提高开发效率。相信大家使用编程导航内的万用模板做项目时,也能感受到这点。

也建议大家在做项目的过程中,注重积累,沉淀属于自己的弹药库,成为代码复用大师!

#开发#

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP