开发中对象命名的一点思考

发布时间:2026/7/1 21:55:15
开发中对象命名的一点思考 一个好的对象命名并非只是让代码表面看起来整洁它背后关系到人类和 AI 对系统的认知方式也会在后续维护和迭代中形塑程序员以及 AI 工具的行为。换句话说合适的命名不但决定了当前代码的优雅程度也会潜移默化地影响未来对代码进行修改、扩展和重构时的思维路径与决策过程。下面我们将通过几个示例探讨如何通过合理的命名让对象真正体现业务含义与自主决策能力而不是简单地扮演一个“被动执行者”。一、避免以er或or结尾的对象命名想象你走进一家餐厅。你会如何点餐是要一份宫保鸡丁还是告诉厨师“你先放油然后大火爆炒然后再加调料”如果你选择后者那么对应到程序设计中大概就是下面的写法class FoodMaker { public Dish Cook(ListStep cookingSteps) { foreach(var step in cookingSteps) { ExecuteStep(step); } return new Dish(); } } // 客户端代码 var maker new FoodMaker(); var steps new ListStep { new Step(放油), new Step(大火爆炒), new Step(加调料) }; var dish maker.Cook(steps);FoodMaker 它只是一个“做饭的人”或“执行器”缺乏更多的“主观能动性”。这不仅增加了使用者在思维层面的负担也显得对专业厨师的经验和技能不够尊重。相比之下更贴近现实的方式是直接告诉对方“我需要一份宫保鸡丁”厨师会根据自身经验和对食材的理解来完成这道菜。例如Chef { public Dish PrepareKungPaoChicken() { // 厨师知道如何准备这道菜 return new KungPaoChicken(); } } // 客户端代码 var chef new Chef(); var dish chef.PrepareKungPaoChicken();这样Chef 完整体现了专业性与自主性角色名称直接让人联想到一个可自主决策、拥有专业技能的人而非简单的“烹饪器”。客户端只需表达“想要什么菜品”而不必详述所有步骤。厨师可以根据具体的食材和场景调整做菜细节为业务带来更多灵活性。值得注意的是很多以 “-er” 或 “-or” 结尾的对象如 Manager、Processor、Controller、Validator 等常常会呈现出类似的“过程化”倾向它们更多体现的是过程集合而非业务主体。当我们把命名改为更能传达专业身份或业务角色的名词时往往会看到对象的“自我意识”和“主观能动性”随之提升从而让整个系统的抽象层次更高、可维护性更好。二、“Service”“Helper”“Utility”等后缀更容易出现“上帝类”在 AI 辅助编程工具的普及下命名的清晰度在大型项目中显得尤为重要。模糊或过于抽象的名字不仅会增加团队成员、甚至让3个月后的你自己的认知负担也会让 AI 在大量上下文中难以理解该对象的真实意图甚至产生误导性补全。我们先来看一个不恰当的示例错误示例RestaurantService 集合了一切琐事public class RestaurantService { // 名称看似管理餐厅的一切却混合了做饭、送餐和财务等完全不同的功能 // 烹饪某道菜 public void cookDish(String dishName) { } // 将菜品送到指定地址 public void deliverFood(String address) { } // 安排厨师、服务员等员工的工作排班 public void scheduleStaff(String staffName, String shift) { } // 处理餐厅每天或每月的财务结算 public void handleBilling() { } }问题过于宽泛、抽象的类名RestaurantService 似乎负责所有与餐厅相关的功能从做菜到送餐再到财务结算远远超出了单一职责的范围。对 AI 的误导当 AI 工具在大规模代码库中搜索或补全时见到“RestaurantService”可能以为这里面能找到任何与餐厅运营相关的逻辑补全时也可能把更多不相干的功能例如“采购食材”、“营销活动”等一股脑塞进来很容易导致上帝类。难以维护与扩展假如将来要更改配送方式或财务记账逻辑你会发现所有功能都耦合在同一个类里一次改动极有可能波及整个系统。更合理的设计按专业分工拆分类要让代码更易读、更具可维护性也让 AI 分析更准确我们可以将“餐厅运营”按照现实场景拆分成多个专门对象让每个类名更能“自证其职”// 专注做菜逻辑 public class Kitchen { public void cookDish(String dishName) { // 专业处理做菜流程 } } // 专注外卖配送 public class Delivery { public void deliverFood(String address) { // 专业处理送餐流程 } } // 专注人员排班 public class StaffScheduling { public void schedule(String staffName, String shift) { // 专业处理员工排班 } } // 专注财务结算 public class Billing { public void settleAccounts() { // 专门处理账务结算 } }好处职责明确Kitchen 只做烹饪Delivery 只管外卖StaffScheduling 只负责排班Billing 用于结算财务。每个对象都有清晰的专业领域。易于理解无论是人还是 AI看到类名便能迅速推断其功能降低误解。便于扩展将来需要为“配送”加入自动调度或为“做菜”加入菜单推荐逻辑也可以在对应的类中单独迭代而不会影响其他模块。匹配现实场景现实中餐厅的后厨、配送员、人事、财务等各司其职软件设计中也应遵循类似原则。