Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

English Original

迁移模式与案例研究

你将学到什么: 如何将常见的 C# 模式(Repository、Builder、DI)翻译成惯用的 Rust 写法,以及那些已经完成转化的公司在实际应用中所取得的成果。

难度: 中级

当你将一个项目从 C# 迁移到 Rust 时,你并非只是在改变语法,而是在改变你的 思维模型 (Mental Model)。这一章节将向你展示如何将熟悉的 C# 架构模式映射到对应的 Rust 模式。


模式映射:C# 到 Rust

C# 模式Rust 对应物说明
RepositoryTraits + 泛型trait Repo<T>
依赖注入 (DI)构造函数注入将依赖传递给 new()
生成器 (Builder)消费式构建器每一个构建步骤都消费 self 并返回 Self
LINQ迭代器链 (Iterator Chains).iter().filter().map()
Entity FrameworkSQLx 或 SeaORMSQLx 因其“SQL 优先”的理念在 Rust 中非常受欢迎
Try/CatchResult<T, E> + ?显式的错误传播机制

案例研究:CLI 工具迁移

背景: 某团队维护着一个 C# 命令行工具。由于其频繁使用 .ToList() 将所有数据加载进内存,导致处理 500MB 的 CSV 文件时,内存占用飙升至 4GB。 解决方案: 使用 Rust 的流式迭代器(Streaming Iterators)对该工具进行了重写。 迁移成果:

  • 内存消耗: 4GB -> 12MB
  • 处理速度: 45 秒 -> 3 秒
  • 分发体积: 单个可执行文件,不再需要 .NET 运行时环境。

案例研究:微服务替换

背景: 一个高吞吐量的认证微服务(10k req/s)。由于 Garbage Collection (GC) 导致的不可预测性,其 p99 延迟偶尔会飙升(高达 200ms)。 解决方案: 使用 Rust 的 Axum 框架重新实现。 迁移成果:

  • p99 延迟: 200ms -> 4ms (GC 导致的抖动被完全消除)
  • Docker 镜像: 210MB -> 12MB
  • 冷启动速度: 2.1 秒 -> 0.05 秒

迁移中的心智转变

  1. 不要构建“类层级结构”:改用平坦的结构体(Structs)和 Trait。
  2. 避免默认使用 Clone:在 C# 中,所有数据通常都是引用;而在 Rust 中,克隆的代价很大,你需要优先考虑所有权(Ownership)。
  3. 迭代器是你的好帮手:在 Rust 中,它们是实现高性能且低内存占用数据处理的核心密钥。

C# 开发者总结表

旧习惯新习惯
抛出一个异常返回一个 Result
使用一个基类使用一个 Trait
先创建一个 List 集合使用迭代器直到最后一步
交给 GC 来处理内存使用 Drop 处理资源清理

练习:确定迁移目标

挑战: 审视你目前的某个 C# 项目。找出一个符合以下任一特征的服务或工具:

  1. 内存占用过大。
  2. 经常受 GC 暂停导致性能不可预测。
  3. 需要作为一个极速、极小的命令行工具运行。

关键理解: 成功的迁移通常是从那些 Rust 的高性能和精细化内存控制能产生最大价值的**“热点路径(Hot Paths)”**开始的。