C#中的Clean Code:面向初学者的原则与示例

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C#中的Clean Code:通往专业代码之路

每位开发者都梦想写出不仅能够运行,而且易于阅读、维护和扩展的代码。由Robert Martin推广的“Clean Code”概念,不仅仅是一套规则,更是一种专业精神。在本文中,我们将结合C#语言和.NET平台,通过简单易懂的示例,为初学者解析Clean Code的关键原则。您将学习如何将“脏代码”转变为优雅可靠的解决方案。



1. 有意义的命名:迈向整洁的第一步

Clean Code最重要的部分就是命名。变量、方法、类或接口的名称应能回答“这是什么?”或“它做什么?”的问题。好的命名可以省去编写注释的必要。



糟糕与良好的示例

避免使用单字母缩写(循环计数器除外)和抽象的名称。



// 糟糕:含义不明的名称int d; // elapsed time in daysList<string> l = new List<string>();

public void Proc(int x) { // ...}

// 良好:有意义的名称int elapsedTimeInDays;List<string> customerNames = new List<string>();

public void ProcessOrder(int orderId){ // ...}


C#命名规则:

  • 类和方法 — 使用PascalCase(例如OrderService、CalculateTotal)。
  • 局部变量和参数 — 使用camelCase(例如orderId、customerName)。
  • 接口 — 以字母I开头(例如IRepository)。
  • 避免“匈牙利命名法”(如strName)。变量的类型应从上下文中显而易见。


2. 函数:小而专一

函数(或方法)应该短小且只完成一项任务(方法级别的单一职责原则)。如果一个函数做了多件事,就应该将其拆分为更小的函数。



重构大型函数

假设我们需要保存订单并发送通知。糟糕的代码会一次性完成所有操作。



// 糟糕:函数做了太多事情public void SaveOrderAndNotify(Order order){    // 1. 验证    if (order.Items.Count == 0) throw new Exception("Empty order");

// 2. 保存到数据库(假设) Console.WriteLine($"Order {order.Id} saved.");

// 3. 发送邮件 Console.WriteLine($"Notification sent to {order.CustomerEmail}.");}

// 良好:拆分为小函数public void ProcessOrder(Order order){ ValidateOrder(order); SaveOrder(order); SendOrderConfirmation(order);}

private void ValidateOrder(Order order){ if (order.Items.Count == 0) throw new InvalidOperationException("Cannot process an empty order.");}

private void SaveOrder(Order order){ // 保存逻辑 Console.WriteLine($"Order {order.Id} saved.");}

private void SendOrderConfirmation(Order order){ // 发送逻辑 Console.WriteLine($"Notification sent to {order.CustomerEmail}.");}


建议: 尽量保持同一函数内的抽象级别一致。不要在一个方法中混合数据库操作和文本格式化。



3. 错误与异常处理

Clean Code以可预测的方式处理错误。在C#中,这通过异常来实现。避免返回“魔法数字”(例如-1)或null来表示错误。



// 糟糕:出错时返回 nullpublic User FindUser(int id){    if (id <= 0) return null; // 调用代码该怎么办?    // ... 查找    return n                

博客

书籍推荐