抽象流程还是抽象对象?一写二抄三重构

要不要抽象,关键在于要不要复用。业务流程都是独立的,不需要复用;技术类流程需要复用。一写二抄三重构,第二次大量重复时就可以开始重构了。 现象 写代码的时候,总纠结要不要抽象流程、抽象对象、面向组合。 这样很难,因为没有明确的复用需求,不知道稳定点在哪。 核心:一写二抄三重构 一写,二抄,三重构。 要不要抽象,关键在于要不要复用。 业务流程都是独立的,不需要复用,所以谈不上抽象; 技术类的流程,是需要复用的。 但是没必要第一次就绞尽脑汁抽象流程、抽象对象、面向组合。 第二次是抄还是重构 不是说第二次就一定是抄。 如果是一个方法,抄没问题; 如果是一个流程,一堆方法,第二次抄就不合理了。 这样的后果是第三次重构非常困难,甚至会因为功能的兼容影响没法进行。 如果是大量的话,第二次就可以开始重构了。 抽象流程 vs 抽象对象 k8s 为什么牛逼,原因在于它定义了一套声明式的流程。 我们创建主机、创建备份等,看起来流程不一样,但是上升一个维度,都能用声明式的流程来处理。 但 2026 年更新后的认知是:k8s 是极致的面向对象。 虽然它的控制器是面向流程的,但是控制器仅仅是对象下的血肉。 顶层还是围绕对象设计的; 控制器是属于对象的; k8s 极致面向对象,消除流程,将流程隐藏在对象中。 流程是易变的,对象是相对稳定的,所以不会去抽象流程,而是抽象对象。 一个例子:采集 pv-lv 和 lv info 数据采集、数据同步,涉及到新增和删除。 所以这里的流程最后抽象为: 采集; 从 db 获取; diff 得到 insert 和 delete; 执行 insert 和 delete。 不同的数据对象,提供支持 diff、insert 和 delete 的方法即可。 这个流程也不是一开始就想出来的,也是边写、边思考做出来的。 小结 要不要抽象,关键在于要不要复用; 业务流程独立,不需要复用;技术类流程需要复用; 一写二抄三重构,第二次大量重复时就可以开始重构; 流程是易变的,对象是相对稳定的,所以抽象对象而非流程; 好的抽象是边写边思考做出来的,不是一开始就设计好的。

February 15, 2026 · 1 min · 64 words · 文叨叨

代码写三遍:跑通、防御、优化

写代码高价值套路:代码写三遍。第一遍跑通,第二遍防御,第三遍优化。过早的优化是万恶之源,尤其是新服务新项目的时候。 现象 写代码的时候,总想一步到位。 前期查看各种基础知识,耗费时间;后面组织结构,想日志封装、调度封装,又耗费时间比较多。 结果两周没写完。 核心:代码写三遍 来自华哥(李运华)的写代码高价值套路原则: 防御性编程; 代码写三遍; 快速失败; 面向对象原则; 短函数。 其中"代码写三遍"是核心: 跑通:先把功能跑通; 防御:加上防御性编程; 优化:最后再优化。 过早的优化是万恶之源。尤其是在新服务新项目的时候。 为什么写三遍反而更快 比如这次的"自愈组件"。 如果按照写三遍: 跑通,最多 4 天; 异常场景最多 1 天; 后面针对性优化、针对性学习,学习效率高。 比如先针对学习日志,针对优化调度,这个过程中会思考是否过度优化,其实发现很多没必要。 关键这是一个快速交付的路径,很快有结果,没有汇报压力。 没有压力,有条不紊,是非常重要的一个因素。 防御性编程 防御性编程包括: 安全:边界、非法值校验、特殊情况、异常情况等; 快速失败、回滚等; 追踪:日志等。 小结 代码写三遍:跑通、防御、优化; 过早的优化是万恶之源,尤其是新服务新项目; 写三遍反而更快,因为快速交付、没有汇报压力; 没有压力、有条不紊,是非常重要的因素; 防御性编程:安全、快速失败、追踪。

February 14, 2026 · 1 min · 41 words · 文叨叨