背景

async_trait 大幅提升了工程可读性,但在高频路径里也可能引入额外分配和动态分发开销。

选择建议

  1. 热路径优先泛型静态分发
  2. 插件式扩展再考虑 trait object
  3. 先 benchmark 再下结论
pub trait Storage {
    fn get<'a>(&'a self, key: &'a str) -> Pin<Box<dyn Future<Output = Option<String>> + Send + 'a>>;
}

总结

抽象不是免费的,但可维护性也有价值,关键是按热点分层。


架构取舍从来不是二选一,而是按场景分配复杂度。