公司动态

【共创季稿事节】「毕业季 · 鸿蒙同行」我的鸿蒙课程设计复盘:校企合作项目中的收获与遗憾

📅 2026/7/20 12:38:01
【共创季稿事节】「毕业季 · 鸿蒙同行」我的鸿蒙课程设计复盘:校企合作项目中的收获与遗憾
文章目录每日一句正能量一、课程开始前我以为“课程设计”就是把课堂知识拼成一个App二、课程结构为什么前半程学能力后半程做工程2.1 基础阶段第14周2.2 平台能力阶段第57周2.3 项目设计阶段第810周2.4 迭代开发阶段第1114周2.5 展示与复盘阶段第1516周三、项目选题从“校园超级App”收敛到设备巡检与报修3.1 核心用户3.2 核心闭环3.3 明确不做四、需求调研我们原本以为用户最关心“页面好不好看”五、项目架构第一次主动把页面、业务和数据分开5.1 交互层5.2 状态层5.3 业务层5.4 数据层5.5 质量层5.6 工程目录六、团队分工表格写得很清楚执行时仍然失衡成员A组长与业务层成员BArkUI和多端适配成员C数据层成员D测试、文档与演示七、状态机我们第一次发现“已提交”不是一个简单布尔值八、ArkUI 页面从成功状态扩展到完整页面状态九、离线队列项目最有价值的技术点也是返工最多的部分十、项目时间线第13周的联调危机第8周选题评审第9周用户访谈第10周架构评审第11周V0.3第12周V0.6第13周联调危机第14周V1.0第16周答辩十一、项目界面与演示十二、教师指导给答案不如不断追问边界十三、成绩评价分数是结果评价摘要更值得复盘十四、最大的收获一从“会接口”到“会设计状态”十五、最大的收获二学会把技术选择讲成“取舍”十六、最大的收获三团队协作必须有可见资产十七、遗憾一选题收敛得太晚十八、遗憾二测试成员介入太晚十九、遗憾三性能数据缺乏说服力二十、遗憾四项目缺少长期用户验证二十一、收获与遗憾对照收获遗憾二十二、如果重新做一次我会怎样安排第8周第9周第10周第1112周第13周第14周第15周第16周二十三、课程成果如何沉淀成求职资产二十四、课程设计对我的真正影响二十五、总结每日一句正能量不被任何情绪而变得被动就是最好的状态。情绪可以来但不被它推着走。愤怒时不攻击悲伤时不沉溺焦虑时不乱做决定。标记参与方向三「毕业季 · 鸿蒙同行」文章投稿。一、课程开始前我以为“课程设计”就是把课堂知识拼成一个App这门校企共建 HarmonyOS 课程持续 16 周。前 7 周以 ArkTS、ArkUI、Stage Model、网络、数据和通知等基础能力为主第 8 周开始进入团队课程设计最后两周进行项目验收、视频演示和答辩。我对课程设计最初的理解非常简单选一个功能多的题目把课堂里学过的接口尽量用进去最后做出几个好看的页面。第一次选题评审就暴露了问题。我们提出的题目叫“校园超级服务平台”计划包含校园地图课程表失物招领实验室预约校园资讯设备报修AI问答手机和平板协同。企业导师看完后问四个人、八周时间你们最想解决的一个问题是什么我们答不上来。这次评审让我意识到课程设计不是功能数量比赛。它真正考察的是能不能识别真实问题能不能控制范围能不能完成核心闭环能不能解释技术选择能不能协作交付能不能诚实复盘不足。二、课程结构为什么前半程学能力后半程做工程课程大致分为五个阶段。2.1 基础阶段第14周内容ArkTS 基础ArkUI 组件与布局状态管理页面路由Stage ModelUIAbility 生命周期Git 基本操作。要求每名学生独立完成一个包含列表、表单、详情和错误状态的小应用。2.2 平台能力阶段第57周内容网络请求本地数据通知权限资源适配多端布局调试与日志。这个阶段最重要的改变是老师不再只验收“能不能运行”而是要求加载状态空数据错误提示重试缓存日志真机或模拟设备验证。2.3 项目设计阶段第810周内容选题需求调研原型数据模型架构团队分工里程碑风险清单。2.4 迭代开发阶段第1114周每两周检查一次可运行版本而不是只看PPT进度。2.5 展示与复盘阶段第1516周提交代码README架构图测试记录演示视频答辩PPT个人贡献项目复盘。华为开发者联盟提供的知识地图将官方指南、Codelabs、示例代码、API参考、FAQ和视频教程按开发任务旅程组织起来开发者学堂也通过课程和 Codelabs 提供“学与练”的路径。课程设计阶段我们不再只依赖课堂PPT而是学会回到官方文档核对接口、约束和版本差异。三、项目选题从“校园超级App”收敛到设备巡检与报修我们重新提出了四个选题校园超级AppAI课堂全自动分析校园设备巡检与报修校园资讯聚合。最终选择“校园设备巡检与报修”原因是学校实验室、教室和公共区域存在设备巡检需求痛点明确流程完整数据可以模拟或小规模采集适合手机执行、平板查看可以实践网络、缓存、状态机、离线队列和通知八周内能完成核心版本。3.1 核心用户学生助管实验室管理员校园设备维护人员管理端教师。3.2 核心闭环接收巡检任务 → 到达设备 → 查看检查项 → 填写巡检结果 → 发现异常 → 创建报修 → 弱网时保存本地 → 网络恢复后同步 → 管理端查看处理状态3.3 明确不做全校资产管理自动识别所有设备故障复杂后台管理系统真实支付未经授权的校园统一身份认证大规模设备控制。范围收敛后我们第一次感觉项目真正有可能完成。四、需求调研我们原本以为用户最关心“页面好不好看”我们访谈了两位实验室老师和几名学生助管。最初准备的问题偏功能是否需要地图是否需要拍照是否需要统计图是否需要消息推送。老师更关心的是任务有没有漏做异常有没有真正提交网络不好时记录会不会丢谁提交、什么时候提交重复报修怎么办设备状态不明确时怎样处理。这次调研让我们把优先级改成数据不丢状态清楚流程可追踪异常可恢复页面再优化。这也是课程设计带给我的第一个工程收获真实用户常常不关心我们用了多少新接口只关心事情能不能可靠完成。五、项目架构第一次主动把页面、业务和数据分开工程分成五层。5.1 交互层任务列表设备详情巡检表单异常报修管理看板。5.2 状态层加载空数据错误表单同步筛选。5.3 业务层任务状态机表单校验报修规则权限判断重试与冲突策略。5.4 数据层网络接口本地缓存离线队列数据映射。5.5 质量层日志单元测试UI测试性能记录演示数据。5.6 工程目录entry/src/main/ets/ ├── pages/ │ ├── TaskListPage.ets │ ├── TaskDetailPage.ets │ ├── InspectionFormPage.ets │ ├── RepairPage.ets │ └── DashboardPage.ets ├── components/ ├── model/ │ ├── InspectionTask.ets │ ├── RepairOrder.ets │ └── PageState.ets ├── service/ │ ├── InspectionService.ets │ ├── RepairService.ets │ └── TaskStateMachine.ets ├── repository/ │ ├── TaskRepository.ets │ ├── CacheRepository.ets │ └── OfflineQueue.ets └── common/ ├── Logger.ets ├── Result.ets └── Constants.ets六、团队分工表格写得很清楚执行时仍然失衡团队四人。成员A组长与业务层负责需求状态机项目计划接口协调答辩。成员BArkUI和多端适配负责手机页面平板看板公共组件视觉统一。成员C数据层负责网络缓存离线队列数据映射同步日志。成员D测试、文档与演示负责测试用例缺陷跟踪README演示视频材料整理。这个分工的问题是测试成员在前半程没有足够开发任务直到后期才大量介入组长和UI成员在联调阶段任务过重。下一轮应该采用“模块主责交叉评审”每个人有主责模块每个模块有第二评审人测试从需求阶段编写验收条件组长不承担所有协调和关键代码。七、状态机我们第一次发现“已提交”不是一个简单布尔值最初任务只有completed:boolean后来发现真实状态至少包含exporttypeInspectionStatusPENDING|IN_PROGRESS|WAITING_SYNC|SUBMITTED|REJECTED|CLOSED状态流转exportclassTaskStateMachine{privatestaticallowed:MapInspectionStatus,InspectionStatus[]newMap([[PENDING,[IN_PROGRESS]],[IN_PROGRESS,[WAITING_SYNC,SUBMITTED]],[WAITING_SYNC,[SUBMITTED,IN_PROGRESS]],[SUBMITTED,[REJECTED,CLOSED]],[REJECTED,[IN_PROGRESS]],[CLOSED,[]]])staticcanTransfer(from:InspectionStatus,to:InspectionStatus):boolean{returnthis.allowed.get(from)?.includes(to)??false}}这个状态机解决了未开始不能直接关闭离线记录处于待同步驳回后可以重新处理已关闭任务不能继续修改。它也成为答辩时最容易体现“项目不是页面拼接”的证据。八、ArkUI 页面从成功状态扩展到完整页面状态exporttypePageStateT|{status:loading}|{status:success,data:T}|{status:empty}|{status:error,message:string}EntryComponentstruct TaskListPage{Statestate:PageStateInspectionTask[]{status:loading}aboutToAppear():void{this.loadTasks()}build(){Column(){if(this.state.statusloading){LoadingProgress()}elseif(this.state.statusempty){Text(暂无巡检任务)}elseif(this.state.statuserror){Column(){Text(this.state.message)Button(重试).onClick(()this.loadTasks())}}else{List({space:12}){ForEach(this.state.data,(item:InspectionTask){ListItem(){TaskCard({task:item})}},(item:InspectionTask)item.id)}}}.width(100%).height(100%)}privateasyncloadTasks():Promisevoid{this.state{status:loading}try{consttasks:InspectionTask[]awaitTaskRepository.getInstance().list()this.statetasks.length0?{status:success,data:tasks}:{status:empty}}catch(error){this.state{status:error,message:任务加载失败请稍后重试}}}}课程前半程我只会展示成功数据课程结束时我开始把错误和恢复当成页面的一部分。九、离线队列项目最有价值的技术点也是返工最多的部分设备间或地下实验室网络不稳定。我们设计本地离线队列exportinterfacePendingOperation{id:stringbusinessId:stringtype:SUBMIT_INSPECTION|CREATE_REPAIRpayload:stringcreatedAt:numberexpireAt:numberretryCount:number}exportclassOfflineQueue{privateitems:PendingOperation[][]enqueue(item:PendingOperation):void{constexistedthis.items.some((current:PendingOperation)current.iditem.id)if(!existed){this.items.push(item)}}asyncflush(sender:(item:PendingOperation)Promiseboolean):Promisevoid{constremained:PendingOperation[][]for(constitemofthis.items){if(item.expireAtDate.now()){continue}constsuccess:booleanawaitsender(item)if(!success){remained.push({...item,retryCount:item.retryCount1})}}this.itemsremained}}第一版遗漏了应用重启后的持久化服务端幂等记录过期提示已成功但客户端超时多次点击重复提交用户查看同步状态。企业导师评审后我们增加本地持久化请求ID队列去重最大重试同步状态手动重试冲突提示。十、项目时间线第13周的联调危机第8周选题评审从超级App收敛到巡检与报修。第9周用户访谈确认数据可靠性高于页面丰富度。第10周架构评审确定状态机和离线同步。第11周V0.3完成任务列表和详情。第12周V0.6完成报修、本地缓存和手机端核心流程。第13周联调危机数据接口字段发生变化旧字段status 0 / 1 / 2 新字段healthStatus NORMAL / WARNING / OFFLINE问题包括UI使用旧字段本地缓存使用旧模型测试数据没有更新统计页面映射失败没有接口版本记录。团队花了两天统一模型和数据映射。第14周V1.0补充弱网测试平板看板空状态同步状态。第16周答辩项目完成核心闭环但仍有明显不足。十一、项目界面与演示演示流程手机端打开当天巡检任务进入门禁设备详情发现设备离线填写报修关闭网络提交后显示“待同步”恢复网络离线队列自动补传平板看板刷新异常数量管理端状态变为“已提交”。配套演示视频脚本已单独输出。由于没有真实课程工程和设备本次不伪造可播放视频文件。十二、教师指导给答案不如不断追问边界校内教师主要指导课程目标需求范围文档规范团队过程答辩表达学术和材料真实性。企业导师主要指导工程分层接口边界异常处理测试日志用户体验真实上线差距。几个印象最深的问题如果网络成功但客户端超时重试会不会创建两条报修为什么状态判断写在页面里而不是业务层平板看板是简单放大手机页面还是承担不同任务你们的性能数据如何测量哪些代码是每个人真正完成的这些问题迫使我们从“项目展示”走向“工程解释”。十三、成绩评价分数是结果评价摘要更值得复盘文中的成绩单是示意材料不能作为正式成绩证明。匿名化样例评分评价项权重得分需求与选题2017技术实现3026团队协作2015测试与文档1511展示与答辩1513总评10082比总分更重要的是评价痛点真实核心闭环完整弱网处理有思考团队分工后期失衡测试介入太晚性能证据不足复盘比较诚实。十四、最大的收获一从“会接口”到“会设计状态”课程开始时我衡量能力的方式是会多少组件会多少Kit能写多少页面。课程结束后我更关心状态有哪些状态如何流转异常如何恢复数据来自哪里页面何时更新请求会不会重复缓存是否过期用户是否知道同步结果。这比记住更多接口更接近工程能力。十五、最大的收获二学会把技术选择讲成“取舍”例如为什么做离线队列不是因为它“技术含量高”而是因为现场网络不稳定巡检记录不能丢。为什么不做实时设备控制因为课程项目没有真实设备授权和安全条件范围会失控。为什么平板只做管理看板因为平板更适合集中查看不适合在设备现场填写所有细节。为什么保留UNKNOWN状态因为服务端旧数据、版本变化和异常输入都可能出现不能把未知强行当正常。答辩真正有效的表达不是“用了什么”而是“为什么这样做、放弃了什么”。十六、最大的收获三团队协作必须有可见资产我们后期建立了四张表任务看板接口字段表风险清单缺陷与测试表。接口字段表字段 类型 是否为空 枚举 默认值 负责人 变更日期 影响模块风险清单风险 概率 影响 负责人 处理方案 截止时间 状态这些工具看似不如写代码有成就感却直接减少了返工。十七、遗憾一选题收敛得太晚前两周仍然舍不得删除地图AI问答校园资讯服务卡片跨设备接续。最终很多功能没有完成前期讨论也浪费时间。下一次应该在选题阶段坚持一个核心用户 一个核心问题 一个完整闭环 一个鸿蒙特色能力 一组可验证数据十八、遗憾二测试成员介入太晚测试成员前期主要写文档第13周才集中写用例结果发现状态非法流转表单重复提交缓存模型兼容页面空状态快速切换请求覆盖。如果测试从需求阶段介入可以提前把验收条件写成用例。下一轮应该采用需求完成 代码 测试 日志 文档十九、遗憾三性能数据缺乏说服力我们只记录了少量手工数据首屏加载列表刷新离线补传。但没有统一测试设备网络条件样本数量平均值最大值优化前后版本。答辩中虽然给出了数据却难以证明可重复。下一轮应建立测试基线设备 系统版本 应用版本 网络 数据量 执行次数 平均值 P95 内存 结果二十、遗憾四项目缺少长期用户验证我们只邀请少量同学和教师试用没有真实运行一个学期也没有接入真实设备和学校系统。因此不能夸大为已经提升校园巡检效率已经减少设备故障已经在学校正式部署。准确的结论应该是教学原型完成了核心流程验证小规模试用能够发现交互和状态问题但尚未经过真实长期部署验证。二十一、收获与遗憾对照收获建立工程分层学会异常设计学会Code Review学会接口协作学会测试和日志学会答辩表达学会诚实描述项目边界。遗憾范围收敛晚测试介入晚性能数据不足缺少长期验证团队负载不均官方文档核对不够及时演示素材准备集中在最后一周。二十二、如果重新做一次我会怎样安排第8周访谈选题范围成功指标。第9周原型状态机数据模型测试验收条件。第10周架构接口契约分工环境和自动化。第1112周核心闭环每周可运行版本测试同步编写。第13周弱网异常性能基线。第14周多端适配用户试用缺陷修复。第15周冻结功能测试视频文档。第16周答辩复盘资产归档。二十三、课程成果如何沉淀成求职资产课程结束后我们整理README项目介绍架构图代码片段测试报告视频个人贡献失败复盘V2.0计划。简历项目描述不再写使用ArkTS和ArkUI完成校园巡检系统。而写成面向校园实验室弱网巡检场景负责任务状态机与离线同步模块通过本地队列、请求幂等标识和同步状态提示保障记录可恢复并将手机执行端与平板管理看板分工设计课程样例完成20轮弱网流程测试核心记录无丢失。数据必须来自真实测试不能为了简历好看编造。二十四、课程设计对我的真正影响这门课程没有让我在16周内成为高级HarmonyOS工程师。它让我完成了一个更重要的转变从个人作业到团队项目从成功路径到异常路径从接口调用到架构边界从功能截图到测试证据从临时演示到资产沉淀从追求高分到诚实复盘。这些能力不只适用于HarmonyOS也适用于后续实习、毕业设计和任何软件工程项目。二十五、总结回看这次校企合作鸿蒙课程设计最值得保留的不是最终82分也不是答辩那天顺利跑通的演示而是我们第一次经历了一个接近真实工程的小型周期选题被否定范围被收缩接口发生变化代码被评审弱网暴露问题团队任务失衡测试发现缺陷答辩被追问项目留下遗憾。课程设计的价值不在于证明我们已经可以独立上线商业应用而在于让我们提前看到学校作业和企业工程之间的距离并学会用更可靠的方法缩短这段距离。“毕业季 · 鸿蒙同行”对我来说是一次从课堂知识到工程实践的过渡。收获让我更有信心遗憾则提醒我下一次面对真实项目时应该更早控制范围、更早测试、更早沟通并用真正可复现的证据评价成果。转载自https://blog.csdn.net/u014727709/article/details/163017075欢迎 点赞✍评论⭐收藏欢迎指正