土耳其语重构指南:C#与Go重构案例对照速查表(附完整可运行代码),多语言开发者必看
【免费下载链接】refactoring-guide-in-turkishTürkçe refactoring kılavuzu项目地址: https://gitcode.com/gh_mirrors/re/refactoring-guide-in-turkish
土耳其语重构指南(Türkçe Refactoring Kılavuzu)是一个开源的土耳其语重构(Refactoring)知识手册,系统讲解干净代码、技术债与代码异味,并用C# 与 Go 双语言对照演示 Extract Method、Inline Method 等核心重构案例,仓库内还附带一个完整可运行的 .NET 示例项目,是多语言开发者做代码重构时的实用速查表。
📖 3分钟看懂:什么是重构?
重构 = 在不改变代码外部行为的前提下,提升代码质量、让设计更简洁的过程。
理解重构,先理解两件事:
✅ 干净代码的4个标准
- 对开发者清晰可读:命名规范、方法长度合理
- 没有重复代码:避免"改一处、漏多处"
- 不过度膨胀:行数、类、方法越少越好,少即是好
- 维护成本低:易改、快、省成本
💳 技术债:银行贷款式的比喻
为了赶进度跳过测试、留下脏代码,就像临时向银行借钱——将来要连本带息偿还。不写测试就堆功能,会不断推高维护成本、拖慢开发速度。
什么时候该重构?记住"三规则" 🎯
| 次数 | 做法 |
|---|---|
| 第 1 次 | 直接做,别纠结 |
| 第 2 次 | 忍住重复,但还是做 |
| 第 3 次 | 停下来,重构! |
此外还有 3 个黄金时机:添加新功能前(先让代码变好懂)、修 Bug 时(重构过程中常常顺手找到 Bug)、代码评审时(问题暴露最集中)。
⚠️ 重构三条纪律:重构后代码必须更干净、不混入新功能(分开提交)、重构后所有测试必须通过。
🐛 代码异味速查表:24种"坏味道"一眼识别
代码会自己发出警报。指南收录了 24 种代码异味(Code Smell),以下是最常见的 10 种及对应重构技术速查:
| 代码异味 | 一句话症状 | 推荐重构技术 |
|---|---|---|
| Long Method | 方法长得无法阅读和维护 | Extract Method |
| Large Class | 一个类塞满字段和方法 | Extract Class / Extract Interface |
| Primitive Obsession | 用基本类型硬扛复杂职责 | Replace Data Value with Object |
| Long Parameter List | 方法参数排成一长串 | Introduce Parameter Object |
| Data Clumps | 一组数据总是一起出现 | Extract Class |
| Switch Statements | 又长又乱的 if-else / switch | Replace Conditional with Polymorphism |
| Duplicate Code | 复制粘贴式的重复逻辑 | Extract Method / Substitute Algorithm |
| Feature Envy | 方法总爱用别的类的数据 | Move Method |
| Message Chains | a.b.c.d式调用链 | Hide Delegate |
| Dead Code | 再也没人用的死代码 | Inline Class / Remove Parameter |
💡 异味≠罪过:像
switch-case、Data Class 在适度使用时是合理的,指南对每种异味都标注了"何时可以忽略"。
⚖️ C# 与 Go 重构案例对照速查表
指南的精华在于每个技术都给出C# 与 Go 的双语代码示例。以下 4 个核心技巧对照速查(完整对照见 README.md):
| 重构技巧 | 解决的问题 | C# 写法要点 | Go 写法要点 | 示例文件 |
|---|---|---|---|---|
| Extract Method | 可分组代码块散落在方法体里 | 抽成private static void方法,用"做了什么"命名 | 抽成同包小写函数writeUserInformationToConsole() | ExtractMethod.cs |
| Inline Method | 方法体比方法名还直白 | 内联三元表达式,删掉多余方法 | 删除ifNumberPositive,逻辑直接内联 | InlineMethod.cs |
| Extract Variable | 复杂表达式难以理解 | 拆出basePrice/quantityDiscount/shipping | 用局部变量var同名拆分表达式 | ExtractVariable.cs |
| Inline Temp | 临时变量只被使用一次 | return l * w * h;一步返回 | 同理,去掉无意义的中间变量 | InlineTemp.cs |
📝 典型案例:Extract Method 前后对比
重构前(C# 与 Go 结构一致):
public void DoSomeThing() { // 其他代码块... // 用户信息打印到屏幕(注释在解释代码) Console.WriteLine("Kullanıcı adı: ali_veli"); Console.WriteLine("E-posta: ali_veli@mail.com"); }func DoSomeThing() { // 其他代码块... fmt.Println("Kullanıcı adı: ali_veli") fmt.Println("E-posta: ali_veli@mail.com") }重构后:把"做什么"变成方法名,读名字就懂逻辑:
public void DoSomeThing() { // 其他代码块... WriteUserInformationToConsole(); }func DoSomeThing() { // 其他代码块... writeUserInformationToConsole() }💡为什么值得做?方法名代替注释解释代码、减少重复、逻辑可独立维护——而且 Extract Method 还是后续其他重构(如 Introduce Parameter Object)的前置步骤。
完整指南还覆盖了 Replace Temp with Query、Split Temporary Variable、Remove Assignments to Parameters、Replace Method with Method Object、Substitute Algorithm 等技巧,每个都含"问题 → 方案 → 为什么 → 收益/代价"四段式讲解。
🚀 完整可运行代码:一键运行 .NET 示例项目
仓库自带一个可直接编译运行的 C# 示例项目,每种技巧都提供"坏设计(Bad)→ 好设计(Good)"成对类,方便你边读边跑。
1️⃣ 克隆仓库
git clone https://gitcode.com/gh_mirrors/re/refactoring-guide-in-turkish.git2️⃣ 进入解决方案目录并运行
cd Samples/dotnet/RefactoringTechniques dotnet build dotnet run3️⃣ 项目结构一览
| 文件 | 作用 |
|---|---|
| RefactoringTechniques.sln | Visual Studio 解决方案入口 |
| RefactoringTechniques.csproj | 项目文件(netcoreapp2.2 控制台应用) |
| Program.cs | 程序入口 |
| ExtractMethod.cs | 提取方法:Bad/Good 对照类 |
| InlineMethod.cs | 内联方法:Bad/Good 对照类 |
| ExtractVariable.cs | 提取变量:Bad/Good 对照类 |
| InlineTemp.cs | 内联临时变量:Bad/Good 对照类 |
Go 侧示例则以纯代码片段形式收录在 README.md 中,可复制后直接运行。
🗂️ 项目文件资料索引
| 路径 | 说明 |
|---|---|
| README.md | 完整土耳其语重构指南(概念 + 24 种异味 + 重构技术双语示例) |
| Samples/dotnet/RefactoringTechniques/ | 可运行 C# 重构技巧示例工程 |
| LICENSE | 开源协议文件 |
🎓 写在最后
这份土耳其语重构指南最大的价值在于三点:
- 全中文/土耳其语场景少见的系统性:从"什么是干净代码"到 24 种代码异味再到具体重构技术,一条线讲透
- C# 与 Go 案例对照:让多语言开发者用熟悉的两种语言理解同一套重构思想
- 代码即文档:附带的 .NET 示例项目保证所有 C# 案例真实可运行
掌握"三规则 + 异味速查表 + 4 个核心技巧",你就能在日常开发中把重构变成肌肉记忆。动手跑一遍示例代码,是理解这套知识最快的方式!💪
【免费下载链接】refactoring-guide-in-turkishTürkçe refactoring kılavuzu项目地址: https://gitcode.com/gh_mirrors/re/refactoring-guide-in-turkish
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考