鸿蒙应用开发从入门到实战(五):ArkUI概述
钾妓谪柏在我所见过的项目中大多数团队都倾向于“功能堆砌式”开发需求来了就加逻辑或函数却很少有人愿意花时间在设计上尤其是在对象命名花费时间。这看似“快速实现需求”的方式通常会对代码的可读性产生坏的影响进而影响可维护性。一个好的对象命名并非只是让代码表面看起来整洁它背后关系到人类和 AI 对系统的认知方式也会在后续维护和迭代中形塑程序员以及 AI 工具的行为。换句话说合适的命名不但决定了当前代码的优雅程度也会潜移默化地影响未来对代码进行修改、扩展和重构时的思维路径与决策过程。下面我们将通过几个示例探讨如何通过合理的命名让对象真正体现业务含义与自主决策能力而不是简单地扮演一个“被动执行者”。一、避免以er或or结尾的对象命名想象你走进一家餐厅。你会如何点餐是要一份宫保鸡丁还是告诉厨师“你先放油然后大火爆炒然后再加调料”如果你选择后者那么对应到程序设计中大概就是下面的写法class FoodMaker {public Dish Cook(List cookingSteps) {foreach(var step in cookingSteps) {ExecuteStep(step);}return new Dish();}}// 客户端代码var maker new FoodMaker();var steps new List {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看到类名便能迅速推断其功能降低误解。便于扩展将来需要为“配送”加入自动调度或为“做菜”加入菜单推荐逻辑也可以在对应的类中单独迭代而不会影响其他模块。匹配现实场景现实中餐厅的后厨、配送员、人事、财务等各司其职软件设计中也应遵循类似原则。三、对象命名与对象“智能”属性当环境变化时仍能自适应现实生活中若宫保鸡丁的必需食材例如花生突然缺货真正的专业厨师会主动寻找替代食材而不会要求顾客重新“下指令”或“换个点餐方式”。同理在软件中一个设计得足够“智能”的对象也应该能在外部条件或业务需求变化时自行调整内部逻辑而不影响调用者的使用方式。示例面相过程的烹饪public class CookingProcess {public Dish cook(String dishName) {// 无论食材是否缺货都执行固定步骤// ...return new Dish(dishName); // 返回做好的菜}}局限一旦食材缺货需要调用方自己判断是否可做这道菜或修改烹饪流程。每次需求变化都得改动 cook 方法或调用代码无法实现真正的“自适应”。改进示例厨师是专业人士能适配环境变化下面的 Chef 内部自行决定花生是否可用如果缺货就用其他食材替代。这样即使后续有更多类似变化换新调料、临时供应商等也能集中在 Chef 内部调整无需改动客户端调用代码。public class Chef {// 模拟花生库存状态可来自数据库或配置文件private boolean peanutsInStock false;public Dish prepareDish(String dishName) {if (宫保鸡丁.equals(dishName)) {// 如果花生缺货就用其他干果替代if (!peanutsInStock) {// ...在内部改用腰果或其他替代食材}// ...否则正常使用花生}// 其余烹饪逻辑return new Dish(dishName);}}好处内聚性强所有判断和替代逻辑都放在 Chef 内部外界无需关心具体做法。客户端调用不变无论花生库存状态如何变化调用者依旧只需“一句命令”点餐即可得到结果。可扩展将来若再遇到更多类似场景例如某调料临时售罄只需修改 Chef不会影响已有的调用代码。客户端调用示例环境/需求变化不影响客户端调用public class Main {public static void main(String[] args) {Chef chef new Chef();// 客户端只需告诉厨师要做“宫保鸡丁”Dish dish chef.prepareDish(宫保鸡丁);// 即使花生缺货Chef 会自动使用其他食材无需调用方改动}}无论花生库存如何客户端调用方式始终一致一个智能的 Chef 能在内部完成相应的“自适应”处理。小结命名即设计把对象当做有生命的实体并能够自主决策行为对象的命名许多人往往只把它当作“好看”或“顺口”的问题却忽视了它所暗含的业务理解深度与系统思维。当我们刻意避开 “-er” 结尾或“Service”、“utility”后缀等含糊标签并让对象名真实反映其专业角色与业务职责时能够有下述好处减少误解新成员或 AI 工具都能迅速理解类的意图防止在补全或分析时走偏。提升内聚各对象的逻辑边界更加清晰改变一处功能不必连带修改全局。易于扩展每个对象如同灵活的模块可独立维护、替换或升级而不影响整体架构。贴近业务与产品或业务团队在概念层面保持一致沟通效率提升也减少了架构设计与业务需求间的鸿沟。

相关新闻

【URP】[投影Projector]解析与应用

【URP】[投影Projector]解析与应用

城辣品醋整体定位 了解一个开源项目,最应该了解的就是其定位,或者说它要解决的问题域。 夜莺的定位就是四个字:告警引擎。夜莺对接多种数据源(比如 Prometheus、VictoriaMetrics、MySQL、ClickHouse、Postgres、ElasticSearch&…

2026/5/17 8:15:47 阅读更多 →
起恶意请求。 原理详解 用户登录了 B 网站,B 网站在浏览器里设置了会话 Cookie。 用户在未退出登录的情况下访问了攻击者控制 ...

起恶意请求。 原理详解 用户登录了 B 网站,B 网站在浏览器里设置了会话 Cookie。 用户在未退出登录的情况下访问了攻击者控制 ...

事瞥参于一、前言 截图: baby7.github.io首页截图 下面说一下优缺点,主要对比的是购买服务器搭建个人博客。 优点: 不需要买服务器 使用Github Pages的服务器,只需要建一个github仓库,然后往里面放html文件就可以了&am…

2026/5/17 8:15:44 阅读更多 →
基于Java+SSM+Flask药店药品信息管理系统(源码+LW+调试文档+讲解等)/药店管理/药品信息管理/药品系统/药品库存/药品销售/药品采购/药品分类/药品监管/药品安全/药品价格/药品清单

基于Java+SSM+Flask药店药品信息管理系统(源码+LW+调试文档+讲解等)/药店管理/药品信息管理/药品系统/药品库存/药品销售/药品采购/药品分类/药品监管/药品安全/药品价格/药品清单

博主介绍 💗博主介绍:✌全栈领域优质创作者,专注于Java、小程序、Python技术领域和计算机毕业项目实战✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 2025-2026年最新1000个热门Java毕业设计选题…

2026/7/4 13:28:08 阅读更多 →

最新新闻

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南

5分钟在Windows搭建RTMP流媒体服务器:Nginx-RTMP-Win32完整指南 【免费下载链接】nginx-rtmp-win32 Nginx-rtmp-module Windows builds. 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-rtmp-win32 想在Windows平台上快速搭建自己的流媒体直播服务器吗…

2026/7/6 15:10:00 阅读更多 →
用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春

用经验驾驭AI:大龄程序员的第二春 前几天,团队里一个刚毕业的小伙子凑过来看我写代码。他盯着屏幕看了半天,突然冒出一句:“哥,你这个写代码的方式好奇怪,全是用中文描述需求,让AI生成代码&…

2026/7/6 15:07:57 阅读更多 →
朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建 2 个核心函数与拉普拉斯平滑

朴素贝叶斯分类器 Python 实现:从零构建核心函数与拉普拉斯平滑实战1. 朴素贝叶斯算法原理精要朴素贝叶斯分类器基于贝叶斯定理构建,其核心公式为:P(y|x) P(x|y) * P(y) / P(x)其中:P(y|x)是给定特征x时类别y的后验概率P(x|y)是似…

2026/7/6 15:05:55 阅读更多 →
SDOI2010试题评价

SDOI2010试题评价

这套题之所以经典(或者说“臭名昭著”),是因为它完美展现了OI题目的两个极端:极致的思想之美与极致的工程之恶。 第一部分:噩梦的巅峰——猪国杀 题目定位: OI史上最复杂的模拟题,没有之一。它更像是一个软件工程项目的需求文档,而不是一道5个小时的竞赛题。 详细解剖…

2026/7/6 15:05:55 阅读更多 →
西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法

西安邮电大学历年考试试卷库:学生备考的终极指南与高效学习方法 【免费下载链接】XUPT-Exam-Collection 西安邮电大学历年 期中/期末考试 卷子共享库 项目地址: https://gitcode.com/gh_mirrors/xu/XUPT-Exam-Collection 西安邮电大学考试试卷库是一个专为西…

2026/7/6 15:05:55 阅读更多 →
[东软电量计开发]:ES32L0910开发调试指南(一)

[东软电量计开发]:ES32L0910开发调试指南(一)

简介 随着移动电源新国标的发布,移动电源各个摸底测试机构都在做新国标解读宣贯会,根据新规的要求,基本上原有的方案都要推翻,电芯要求、保护策略、智能管理、禁用等全方位升级。 于是,移动电源新方案都需要增加电量计,主要用来采集数据(电芯电压、电流、SOC、SOH、温度…

2026/7/6 15:03:54 阅读更多 →

日新闻

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2 与 MySQL 单元测试兼容性:5 个关键 SQL 语句差异与规避方案

H2与MySQL单元测试兼容性:5个关键SQL语句差异与规避方案1. 单元测试中的数据库兼容性挑战在Java开发领域,单元测试是保证代码质量的重要环节。当应用涉及数据库操作时,测试环境的搭建往往成为开发者的痛点。H2数据库因其轻量级、内存模式和快…

2026/7/6 0:01:17 阅读更多 →
Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘

Windows任务栏终极清理指南:用RBTray一键隐藏窗口到系统托盘 【免费下载链接】rbtray A fork of RBTray from http://sourceforge.net/p/rbtray/code/. 项目地址: https://gitcode.com/gh_mirrors/rb/rbtray 你是否厌倦了Windows任务栏上密密麻麻的图标&…

2026/7/6 0:01:17 阅读更多 →
Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C++ 运行时库一键安装终极指南:告别DLL缺失烦恼

Visual C 运行时库一键安装终极指南:告别DLL缺失烦恼 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过这样的情况:下载了…

2026/7/6 0:05:19 阅读更多 →

周新闻

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容

B站视频下载神器BiliTools:5分钟学会轻松保存任何B站内容 【免费下载链接】BiliTools A cross-platform bilibili toolbox. 跨平台哔哩哔哩工具箱,支持下载视频、番剧等等各类资源 项目地址: https://gitcode.com/GitHub_Trending/bilit/BiliTools …

2026/7/6 8:11:50 阅读更多 →
威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型全解析:从新手入门到实战应用,助你构建安全产品!

威胁模型的陌生现状在忙碌疲惫的一天里,参与了关于混合后量子密码学的讨论,应付端点攻击找茬的人,还参与留言板讨论后,发现“威胁模型”对多数人仍是陌生概念,且多被当作时髦用语。有趣的相关画作有一幅由 Embyr 创作的…

2026/7/6 8:11:52 阅读更多 →
渗透测试入门指南:从零基础到实战环境搭建

渗透测试入门指南:从零基础到实战环境搭建

1. 从“看热闹”到“入门”:我理解的渗透测试到底是什么?每次看到新闻里说某个大公司的数据被“黑”了,或者某个网站被攻击导致服务瘫痪,你是不是和我一样,心里会冒出两个念头:一是“这黑客真厉害”&#x…

2026/7/6 6:52:56 阅读更多 →

月新闻