技术博客文章
Laravel 用 Action 类与 DTO 收口业务逻辑:让控制器只做路由与装配
控制器不该塞满业务 把下单、退款这类流程写在控制器里,复用靠复制粘贴,测试要起整套 HTTP。Action 类把“一个业务动作”封装成单一可调用对象,DTO 把零散的请求参数收成强类型对象,控制器只负责接参数、调动作、回响应。 定义一个 ...
Rust 用 tower 中间件栈:用 RetryLayer、TimeoutLayer 与自定义 Layer 收敛横切逻辑
tower 是 Axum 的底盘 Axum 的 Service 体系来自 tower:每个请求都经过一层层 Layer 包裹的 Service。把超时、重试、日志这些横切逻辑写成 Layer,比在每个 handler 里重复代码干净得多,而...
Go 数据库迁移实战:用 golang-migrate 做版本化、可回滚的表结构演进
为什么不用代码里自动建表 手写 CREATE TABLE 散落在初始化函数里,既看不到历史,也回不去。golang-migrate 把每次结构变更写成一对 up/down SQL 文件,带递增版本号,向上迁移和向下回滚都有据可查。 编写迁...
Vue 3 插槽组合实战:用作用域插槽与具名插槽搭出可复用布局组件
插槽解决的是“布局归父、内容归子”的复用 当多个页面共用同一套卡片外壳,但内部标题、操作区、主体各不相同,最干净的做法不是 props 传对象,而是把可变部分交给插槽。Vue 3 的具名插槽管“位置”,作用域插槽管“数据回流”。 具名插槽...
React 用 Module Federation 拆巨石应用:独立部署的子应用与主应用运行时组合
为什么需要模块联邦 当多个团队在同一套 React 代码库里互相阻塞,或者一个功能上线要等整个巨石应用重新构建,模块联邦(Module Federation)能把应用拆成多个可独立构建、独立部署的子应用,在运行时由浏览器拼装。它解决的是“构...
Laravel 用 Enum 与 Casts 把状态字段变成类型安全枚举,告别魔法字符串
魔法字符串的代价 订单状态、审核结果这类字段,常见写法是表里存字符串,业务里到处比较 $order->status === 'pending'。拼写错一个字母就悄悄走了错误分支,IDE 也帮不上忙。PHP 8.1 的枚举配合 Laravel...
Rust 用 moka 构建内存缓存,TTL 与 LRU 回收并发安全
为什么选 moka Rust 里自己用 HashMap 加锁做缓存既慢又容易出并发 bug。moka 是一个高性能、线程安全的异步/同步缓存库,内置 TTL(存活时间)、TTI(空闲时间)和基于容量的 LRU 回收,读写几乎无锁,适合在高并...
Go 用 singleflight 合并并发重复请求,防缓存击穿与重复计算
重复请求打爆下游 高并发下,缓存刚好失效的那一刻可能同时涌进来一千个请求,它们发现缓存没有,于是各自去查数据库,数据库瞬间被打满,这就是典型的缓存击穿。singleflight 的核心思路是:同一时刻对同一个 key 的调用,只放一个真正执...
Vue 3 用 effectScope 收口组合式函数的副作用,避免内存泄漏
副作用散落的问题 把逻辑抽成组合式函数时,常常在里面建了 ref、computed、watch,甚至绑定了 window 的事件监听。组件卸载时 Vue 会自动停止模板里创建的副作用,但组合式函数内部手动创建的 watch、事件监听如果在函...
React 用 forwardRef 与 useImperativeHandle 把组件内部方法暴露给父级
为什么需要命令式句柄 多数时候父子组件通过 props 通信就够了。但有些组件天生是"命令式"的:一个弹窗需要父组件触发打开与关闭,一个表单需要父组件主动调用校验或提交。如果为了这些动作设计一堆 props 和状态层层传递,代码会变得很绕。...
