1. 从命名看代码设计的艺术
在软件开发领域,命名从来都不是简单的文字游戏。我见过太多项目因为糟糕的命名而陷入维护噩梦:三个月前写的代码连自己都看不懂,团队成员之间因为命名歧义而频繁沟通,AI辅助工具因为模糊的命名给出错误的建议。这些问题的根源,往往在于开发者没有意识到命名背后隐藏的设计哲学。
好的命名应该像一面镜子,清晰地反映出对象的职责和行为边界。它不仅关乎代码的可读性,更影响着整个系统的可维护性和扩展性。当我们在讨论"FoodMaker"和"Chef"的区别时,实际上是在讨论两种完全不同的设计思路:前者是过程式的指令执行者,后者是具有专业知识的业务实体。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 避免-er/-or结尾的命名陷阱
2.1 执行者命名的局限性
以"-er"或"-or"结尾的命名(如Maker、Processor、Handler等)往往暗示着一种被动执行的角色。这类对象通常具有以下特征:
- 需要外部提供详细的操作步骤
- 缺乏内部状态和业务知识
- 行为边界模糊,容易成为"万能类"
java复制// 典型的执行者模式
public class ReportGenerator {
public void generate(ReportData data, Format format) {
// 需要外部提供所有必要信息
}
}
这种设计的问题在于,调用方需要了解太多实现细节。就像你去餐厅点餐,不应该需要告诉厨师"先放油,再放食材,最后调味"一样,好的对象应该封装这些专业知识。
2.2 专业角色命名的优势
相比之下,使用专业角色命名(如Chef、Accountant、Engineer)能带来明显的好处:
- 更清晰的职责边界
- 更好的封装性
- 更自然的业务表达
java复制// 改进后的专业角色设计
public class FinancialAnalyst {
public AnnualReport prepareAnnualReport(FinancialData data) {
// 内部封装了所有报表生成的专业知识
return new AnnualReport(data);
}
}
实践建议:在命名时
