引言:为什么整洁代码关乎金钱而非美学
想象一下,你刚入职一家新公司,打开一个 C# 项目,看到一个长达 500 行的方法,变量名是 a、b、temp,注释则是中英文混杂。熟悉吗?很可能如此。这样的代码虽然能运行,但维护起来简直是噩梦。C# 整洁代码并非完美主义者的任性,而是一种能节省团队时间、精力和金钱的工具。
本文不会说教。相反,我们将探讨一些具体技巧,帮助您编写 C# 代码,使其既能让新手理解,也能让经验丰富的开发者满意。开始吧!
1. 命名至关重要:如何命名变量、方法和类
让代码更整洁的最简单方法就是使用有意义的名称。C# 区分大小写,但这不能成为使用 int x 或 string d 的借口。
变量:说明存储内容
糟糕的示例:
int d; // 这是什么?日期?距离?钱?string n; // 名字?编号?笔记本?良好的示例:
int daysUntilDeadline;string userName;规则很简单:如果一个月后,没有注释你就无法理解变量存储的内容,那这个名字就是糟糕的。避免使用像 usr 或 cnt 这样的缩写——它们虽然能节省一秒的输入时间,但会花费数分钟的阅读时间。
方法:动词 + 名词
方法代表一个动作。命名时应清晰表明其功能:
CalculateTotalPrice()— 计算总价;SendEmailNotification()— 发送通知;ValidateUserInput()— 验证用户输入。
糟糕的示例:ProcessData() — 过于抽象。“处理”是什么意思?删除?转换?保存?
类:使用单数或复数名词
类是一个实体。User、Order、PaymentProcessor。除非架构需要,否则避免使用像 Manager 或 Helper 这样的后缀。这些类往往会变成“垃圾场”,容纳各种杂项。
2. 方法应该短小精悍,只做一件事
整洁代码的黄金法则:一个方法应该解决一个问题,并且要解决好。如果一个方法超过 20-30 行,很可能需要拆分。
示例:重构“怪兽”方法
想象一个注册用户的方法:
public void RegisterUser(string name, string email){ // 验证 if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException(); if (!email.Contains("@")) throw new ArgumentException(); // 保存到数据库 using var db = new AppDbContext(); var user = new User { Name = name, Email = email }; db.Users.Add(user); db.SaveChanges(); // 发送邮件 var smtp = new SmtpClient(); smtp.Send("admin@site.com", email, "Welcome", "Hello!");}这里有什么问题?三个职责:验证、数据库操作、发送邮件。如果发送逻辑发生变化,就必须修改注册方法。我们来拆分一下:
public void RegisterUser(string name, string email){ ValidateUser(name, email); var user = CreateUser(name, email); SaveUser(user); SendWelcomeEmail(email);}
private void ValidateUser(string name, string email){ if (string.IsNullOrWhiteSpace(name)) throw new ArgumentException("Name is required", nameof(name)); if (!email.Contains("@")) throw new ArgumentException("Invalid email", nameof(email));}
private User CreateUser(string name, string email){ return new User { Name = name, Email = email };}
private void SaveUser(User user){ using var db = new AppDbContext(); db.Users.Add(user); db.SaveCh