要不要抽象,关键在于要不要复用。业务流程都是独立的,不需要复用;技术类流程需要复用。一写二抄三重构,第二次大量重复时就可以开始重构了。

现象

写代码的时候,总纠结要不要抽象流程、抽象对象、面向组合。

这样很难,因为没有明确的复用需求,不知道稳定点在哪。

核心:一写二抄三重构

一写,二抄,三重构。

要不要抽象,关键在于要不要复用。

  • 业务流程都是独立的,不需要复用,所以谈不上抽象;
  • 技术类的流程,是需要复用的。

但是没必要第一次就绞尽脑汁抽象流程、抽象对象、面向组合。

第二次是抄还是重构

不是说第二次就一定是抄。

  • 如果是一个方法,抄没问题;
  • 如果是一个流程,一堆方法,第二次抄就不合理了。

这样的后果是第三次重构非常困难,甚至会因为功能的兼容影响没法进行。

如果是大量的话,第二次就可以开始重构了。

抽象流程 vs 抽象对象

k8s 为什么牛逼,原因在于它定义了一套声明式的流程。

我们创建主机、创建备份等,看起来流程不一样,但是上升一个维度,都能用声明式的流程来处理。

但 2026 年更新后的认知是:k8s 是极致的面向对象。

虽然它的控制器是面向流程的,但是控制器仅仅是对象下的血肉。

  • 顶层还是围绕对象设计的;
  • 控制器是属于对象的;
  • k8s 极致面向对象,消除流程,将流程隐藏在对象中。

流程是易变的,对象是相对稳定的,所以不会去抽象流程,而是抽象对象。

一个例子:采集 pv-lv 和 lv info

数据采集、数据同步,涉及到新增和删除。

所以这里的流程最后抽象为:

  1. 采集;
  2. 从 db 获取;
  3. diff 得到 insert 和 delete;
  4. 执行 insert 和 delete。

不同的数据对象,提供支持 diff、insert 和 delete 的方法即可。

这个流程也不是一开始就想出来的,也是边写、边思考做出来的。

小结

  • 要不要抽象,关键在于要不要复用;
  • 业务流程独立,不需要复用;技术类流程需要复用;
  • 一写二抄三重构,第二次大量重复时就可以开始重构;
  • 流程是易变的,对象是相对稳定的,所以抽象对象而非流程;
  • 好的抽象是边写边思考做出来的,不是一开始就设计好的。