从 Node.js 到 Rust:一个博客编译器的诞生与使用指南 我把博客的构建管线从 Node.js 换成了自己写的 Rust 编译器 kiln。不是因为 Rust 更好——是因为需求变了。这篇文章记录了决策过程、架构设计、踩过的坑,以及一份完整的使用指南:读完你也能用 kiln 从零搭建一个静态站点。 2026
Service 层什么时候有价值,什么时候只是空气 如果 Service 层只是把 Repository 方法复制一遍,那它没有价值——它只是给调用链加了一层空气。Service 层的价值在于编排和协调:把多个数据操作组合成一个有业务含义的流程,或者施加约束和副作用。 2026
为什么错误处理是架构问题,不只是代码问题 很多系统不是因为 happy path 写得差出问题,而是因为失败路径像临时搭的棚子——该重试的没重试,该补偿的没补偿,该报警的静默。错误处理不是 if err != nil 后面写什么,是系统面对失败时保持可预测、可恢复、可解释的能力。 2026
技术债到底该怎么判断优先级 技术债不是'代码丑'——是今天的决策降低了未来的变化速度或提高了修复成本。判断优先级靠三个维度:是否阻碍演进、是否影响正确性、是否削弱可观测性。不是所有债都必须还,但所有债都必须被看见。 2026
状态转换规则需要一个家 接手一个不熟悉的系统时,总要打开三四个文件,从散落的 if/else 里反向工程出一张状态转换图——这张图本来应该在代码里,但它不在。这篇文章聊的是一个设计层面的观察:把状态转换规则当成独立的东西显式化,哪怕只是一张表,对系统正确性的贡献比很多重量级架构更大。 2026
等到第二个用例再抽象 看到重复代码就抽出来——这个本能太强了,强到很少有人在动手之前停下来问:我现在知道得够多吗?信息不够的抽象比没有抽象更昂贵,它不解决问题,它创造了一个需要持续修补的东西。 2026