AI学习笔记结构化:从混乱到有序的HarmonyOS原生应用开发实践

本文以"AI学习笔记结构化"应用为案例,完整阐述基于HarmonyOS + ArkTS的AI应用开发全流程,涵盖需求对齐、架构设计、任务原子化、审批验证、自动化执行到最终评估的六大阶段,深度解析康奈尔笔记法与AI大模型融合的技术实现方案。


在这里插入图片描述

一、对齐阶段(Align):从模糊需求到精确规范

1.1 项目背景与上下文分析

在知识爆炸的时代,学习笔记的整理效率直接影响着认知深度与知识留存率。根据艾宾浩斯遗忘曲线理论,人类在学习新知识后的一个小时内,如果不进行及时复习,记忆留存率将下降至不到百分之五十。传统的笔记方式往往存在三大痛点:第一是信息碎片化问题,笔记内容散落在各处,缺乏统一的组织框架,导致知识点之间无法建立有效关联;第二是回顾成本高,未经结构化的笔记难以快速定位关键信息,学生需要从头到尾重新阅读才能找到所需内容;第三是遗忘曲线陡峭,缺乏科学的复习机制,知识留存率低,学习投入产出比不高。

"AI学习笔记结构化"应用正是在这样的背景下诞生的。它隶属于一个大型的HarmonyOS AI应用集合项目,覆盖健康生活、工作效率、创意娱乐、学习成长、职业发展五大类别。本项目位于应用源码目录下的 apps 文件夹中的 AI学习笔记结构化 模块中,属于"学习成长"赛道。整个项目采用模块化架构设计,每个AI应用独立开发、独立部署,但又共享统一的首页入口和导航框架。

从项目技术栈的角度进行深入分析,我们可以从以下几个层面来理解:

语言层方面,项目采用ArkTS作为开发语言。ArkTS是HarmonyOS的原生应用开发语言,基于TypeScript进行了定制化扩展,但同时也施加了多项严格的语法约束。例如,ArkTS不支持 anyunknown 类型,要求开发者显式指定所有类型;不支持解构赋值,需要开发者手动逐字段赋值;不支持 Function.bind 方法,要求使用箭头函数保持 this 上下文。这些约束虽然在短期内增加了编码的工作量,但从长期来看,它们有效地避免了大量运行时错误,提升了代码的健壮性和可维护性。

UI框架方面,项目采用ArkUI声明式UI框架。ArkUI以 @Component@State 为核心驱动机制,开发者通过声明式语法描述UI的结构和行为,框架负责将声明转化为实际的界面渲染。这种编程模型与传统的命令式UI有本质区别,它让开发者能够以更直观的方式思考和构建用户界面。

数据模型方面,项目使用纯数据类(class)定义数据模型,遵循ArkTS的类语义。每个数据类在构造函数中显式初始化所有字段,确保默认值的安全性。

服务层方面,项目采用独立的Service类封装业务逻辑,遵循单一职责原则。每个Service类只负责一个明确的业务领域,这使得代码更易于理解和维护。

路由机制方面,项目使用 @kit.ArkUI 提供的 router 模块进行页面导航。通过 router.pushUrl 实现页面跳转,通过 router.back 实现页面返回,路由配置在 main_pages.json 文件中统一管理。

构建系统方面,项目基于Ohpm(HarmonyOS包管理器)进行依赖管理。依赖配置在 oh-package.json5 文件中声明,构建时自动解析和下载依赖。

1.2 需求理解与边界确认

原始需求描述为"AI学习笔记结构化",乍看之下是一个简单的笔记整理工具。但经过深入分析,我们需要将其拆解为更精确的需求规范,以确保开发方向与用户期望一致。

核心需求层次可以划分为三个层面:

第一层是用户输入层。用户需要能够输入原始笔记内容、学科类型等基础信息。输入方式为文本输入,通过 TextInput 组件实现。输入的数据通过 onChange 回调事件实时绑定到组件的状态变量中,确保数据的一致性和实时性。

第二层是AI处理层。系统需要基于康奈尔笔记法(Cornell Notes)对原始内容进行结构化重组。康奈尔笔记法是一种经典的笔记方法,它将一页纸分为三个区域:右侧的主笔记区用于记录核心内容,左侧的线索区用于提炼关键词和问题,底部的总结区用于概括要点。此外,系统还需要生成知识图谱节点、闪卡、复习计划等衍生内容,形成一个完整的知识管理闭环。

第三层是输出展示层。系统需要以结构化视图呈现整理后的笔记,包含主笔记(Main Notes)、线索(Cues)、摘要(Summary)、知识图谱(Knowledge Map)、概念(Concept)、关联(Relation)、链接(Linked To)、闪卡(Flashcards)、复习计划(Review Schedule)和知识缺口(Gaps)等十个维度。每个维度都有明确的展示形式,文本字段直接展示文本内容,数组字段使用列表形式逐条展示。

边界确认是需求对齐阶段的关键环节。 我们通过明确的包含/不包含矩阵来界定项目范围:

在输入方面,我们支持文本笔记和学科类型的输入,但不支持图片、语音、视频等多媒体输入方式。这意味着用户只能通过键盘输入文本内容,无法上传图片或录制语音笔记。这一决定是基于项目初期的技术约束和用户场景分析得出的——核心用户群体是需要在移动设备上快速记录和整理学习笔记的学生群体,文本输入已经能够满足其基本需求。

在数据处理方面,我们专注于康奈尔笔记法的结构化处理,但不包含知识图谱的可视化渲染。知识图谱数据以文本列表的形式呈现,而非图形化的节点-边网络图。这一决策降低了前端的渲染复杂度,使得应用能够在低端设备上流畅运行。

在输出方面,我们提供结构化的文本展示,但不支持导出为PDF或其他格式。这意味着用户只能在应用内查看整理后的笔记,无法将其导出到外部系统。这一限制将在后续版本中逐步解决。

在存储方面,我们采用当前会话级的数据存储方式,数据仅在应用运行期间保留。当用户退出应用或刷新页面时,数据将丢失。这不支持云端同步或持久化存储。这一决策是基于MVP(最小可行产品)原则,优先验证核心交互流程,存储功能将在后续迭代中补充。

1.3 疑问澄清与决策记录

在开发过程中,我们遇到了几个关键的设计决策点,这些决策直接影响着应用的整体架构和用户体验。

第一个关键决策是数据结构的设计粒度问题。 我们需要决定AI输出应该设计为扁平结构还是嵌套结构。康奈尔笔记法天然包含多个维度,每个维度又有不同的展示形式。例如,主笔记是文本形式,线索是列表形式,闪卡是问答对形式。如果采用扁平结构,会导致类的字段过多,难以维护;如果采用嵌套结构,又可能增加UI渲染的复杂度,并导致数据访问路径变长。

经过深入分析,我们最终决定采用中等粒度的扁平结构。具体来说,我们将所有维度的数据平铺在 AI学习笔记结构化Data 类中,但通过字段命名明确语义分组。例如,cuesknowledge_mapflashcards 等数组字段各自代表一个独立的知识维度,语义清晰,一目了然。这种设计既保证了数据访问的简便性——通过 result.cues 即可访问线索列表,又维护了语义的清晰度——每个字段的名称直接反映了其业务含义。

第二个关键决策是服务层与AI模型的对接方式问题。 我们需要决定Service层是直接内嵌AI调用逻辑,还是采用抽象接口。项目尚处于早期阶段,AI模型可能由模拟数据逐步演进到真实的大模型API调用。直接在Service中硬编码AI调用逻辑会导致后续替换困难,不符合开闭原则。

经过评估,我们决定采用策略模式的思想来设计Service层。Service内部维护一个 AI学习笔记结构化Data 模型实例,generateData 方法作为策略入口,后续可注入不同的AI处理器实现。当前阶段,generateData 方法返回Mock数据,用于验证交互流程的完整性。当AI大模型就绪后,只需替换 generateData 方法的内部实现,无需修改调用方代码。

第三个关键决策是UI状态管理策略问题。 我们需要决定如何管理UI的展示状态。具体来说,结果展示区域在初始状态下应该隐藏,在用户点击"整理笔记"按钮后才显示。这涉及到条件渲染的策略选择。

我们采用 @State 装饰的布尔变量 showResult 来控制条件渲染。当 showResultfalse 时,结果区域不渲染,页面只显示输入表单和按钮。当用户点击按钮后,showResult 被置为 true,同时 resultData 被赋值为Service返回的数据,框架自动触发条件渲染块内的UI构建。这种策略简单直接,易于理解和维护。

1.4 共识文档核心要点

经过对齐阶段的反复迭代,我们最终确认了以下核心要点,这些要点形成了项目开发的指导原则:

技术方案方面,我们确认采用ArkTS加ArkUI纯原生实现,不依赖第三方UI库。这一决策确保了应用的最佳性能和最小的包体积,同时也避免了第三方库可能引入的兼容性问题。

核心算法方面,我们确认采用康奈尔笔记结构化算法。当前阶段以Mock数据验证交互流程,后续接入真实AI大模型。Mock数据的生成逻辑与真实数据的返回格式保持一致,确保后续切换的平滑性。

数据流方面,我们确认了"用户输入到Service处理再到Data对象最后到UI渲染"的完整数据流动路径。这是一条单向数据流,每个环节都有明确的职责和边界,便于调试和排查问题。

验收标准方面,我们要求用户输入笔记后,点击"整理笔记"按钮,能够在一秒内看到结构化结果展示。这一性能指标确保了良好的用户体验,不会因为等待时间过长而影响使用意愿。

质量门控方面,我们要求代码必须通过ArkTS编译检查,不能使用 anyunknown 类型,UI布局需要适配不同屏幕尺寸。这些要求确保了代码的质量和兼容性。


二、架构阶段(Architect):从系统设计到模块落地

2.1 整体架构设计

基于对齐阶段形成的共识,我们设计了清晰的三层架构体系。这三层架构从上到下依次是展示层、业务层和数据层,每一层都有明确的职责边界和接口规范。

展示层是用户与系统交互的界面,由 AI学习笔记结构化Page.ets 文件实现。它使用 @Component 装饰器定义页面组件,使用 @State 装饰器管理UI状态,通过声明式UI语法构建用户界面。展示层的核心职责包括:接收用户输入、调用业务层处理数据、渲染处理结果。展示层不包含任何业务逻辑,只负责UI的呈现和用户交互的响应。

业务层是系统的核心处理逻辑,由 AI学习笔记结构化Service.ets 文件实现。它包含 generateData 核心业务方法,负责数据转换与组装,并封装了AI模型的调用逻辑。业务层的核心职责包括:接收展示层传入的原始数据、调用AI处理逻辑生成结构化数据、返回处理结果给展示层。业务层对数据层的具体实现一无所知,只通过数据类进行交互。

数据层是系统的数据模型定义,由 AI学习笔记结构化Model.ets 文件实现。它定义了 AI学习笔记结构化Data 数据类,包含了所有字段的定义和类型约束,以及数据完整性的校验逻辑。数据层的核心职责包括:定义数据结构、提供类型安全保障、确保数据的一致性。数据层是整个架构的基础,其他两层都依赖于它。

2.2 分层设计与核心组件

2.2.1 数据层(Model Layer)

数据层是应用的基石。AI学习笔记结构化Data 类定义了所有结构化笔记的字段,这些字段严格按照康奈尔笔记法的框架设计,涵盖了从笔记记录到知识内化的完整流程。

// 文件路径: entry/src/main/ets/apps/AI学习笔记结构化/AI学习笔记结构化Model.ets
export class AI学习笔记结构化Data {
  structured: string[] = []       // 结构化后的笔记条目列表
  main_notes: string = ''         // 主笔记区域(康奈尔笔记右侧主栏)
  cues: string[] = []             // 线索/提示词(康奈尔笔记左侧线索栏)
  summary: string = ''            // 摘要(康奈尔笔记底部总结栏)
  knowledge_map: string[] = []    // 知识图谱节点
  concept: string = ''            // 核心概念
  relation: string = ''           // 概念间关系
  linked_to: string = ''          // 关联知识点链接
  flashcards: string[] = []       // 闪卡列表
  front: string = ''              // 闪卡正面(问题)
  back: string = ''               // 闪卡背面(答案)
  review_schedule: string = ''    // 复习计划
  gaps: string[] = []             // 知识缺口

  constructor() {
    // 显式初始化所有字段,确保默认值安全
    this.structured = []
    this.main_notes = ''
    this.cues = []
    this.summary = ''
    this.knowledge_map = []
    this.concept = ''
    this.relation = ''
    this.linked_to = ''
    this.flashcards = []
    this.front = ''
    this.back = ''
    this.review_schedule = ''
    this.gaps = []
  }
}

设计考量方面,有几个关键点值得深入探讨:

首先,所有字段在构造函数中显式初始化,这是ArkTS的最佳实践。不同于TypeScript中允许隐式的 undefined 值,ArkTS要求字段在使用前必须明确赋值。如果在构造函数中遗漏了某个字段的初始化,编译器会报错,这从源头上避免了空指针异常。我们在构造函数中逐字段进行初始化,确保每个字段都有明确的默认值。

其次,我们使用 string[] 数组类型而非 Array<string> 泛型类型,这是遵循ArkTS的类型标注规范。ArkTS支持两种数组类型的写法,但 string[] 更为简洁直观,也是项目中的统一风格。

最后,类名使用中文拼音加英文混合命名的方式,即 AI学习笔记结构化Data。这种命名风格与项目整体保持一致,虽然在纯英文环境中看起来有些不习惯,但在中文开发团队中,它能够直观地表达类的业务含义,降低沟通成本。

2.2.2 业务层(Service Layer)

业务层封装了核心的数据生成逻辑,是连接用户输入和AI处理结果的桥梁:

// 文件路径: entry/src/main/ets/apps/AI学习笔记结构化/AI学习笔记结构化Service.ets
import { AI学习笔记结构化Data } from './AI学习笔记结构化Model'

export class AI学习笔记结构化Service {
  private model: AI学习笔记结构化Data

  constructor() {
    this.model = new AI学习笔记结构化Data()
  }

  // 生成AI学习笔记结构化数据
  generateData(input: Record<string, Object>): AI学习笔记结构化Data {
    let result: AI学习笔记结构化Data = new AI学习笔记结构化Data()
    // Mock data generation based on input
    let notesVal: string = String(input['notes'] || '')

    result.structured = ['示例数据1', '示例数据2', '示例数据3']
    result.knowledge_map = ['示例数据1', '示例数据2', '示例数据3']
    result.flashcards = ['示例数据1', '示例数据2', '示例数据3']
    result.review_schedule = '生成结果:' + notesVal
    result.gaps = ['示例项1', '示例项2', '示例项3']
    return result
  }
}

设计亮点分析:

关于输入参数的类型设计,input 参数使用 Record<string, Object> 类型而非 any。这是一个深思熟虑的决策。在ArkTS中,any 类型是被禁止的,但我们需要一个能够接收任意键值对输入的灵活类型。Record<string, Object> 正好满足了这一需求:它要求键必须是字符串类型,值必须是对象类型,既保证了灵活性,又提供了基本的类型约束。

关于方法的无副作用设计,generateData 方法返回全新的 AI学习笔记结构化Data 实例,而不是修改传入的参数或内部的 model 实例。这意味着每次调用都会生成全新的数据对象,调用方可以安全地使用返回的结果,而不必担心数据被后续调用意外修改。这种设计遵循了函数式编程的不可变性原则,有助于减少因共享状态导致的bug。

关于可扩展性设计,当前使用Mock数据验证交互流程,但架构已经为真实AI大模型调用做好了准备。当AI大模型就绪后,只需要修改 generateData 方法的内部实现,将Mock数据替换为API调用结果,即可完成功能升级。调用方代码无需任何修改,这体现了面向接口编程的设计思想。

2.2.3 展示层(UI Layer)

展示层使用ArkUI的声明式语法构建用户界面,是整个应用中最复杂的部分。它需要处理用户输入、触发业务处理、渲染处理结果,并管理页面导航:

// 文件路径: entry/src/main/ets/apps/AI学习笔记结构化/AI学习笔记结构化Page.ets
import { AI学习笔记结构化Data } from './AI学习笔记结构化Model'
import { AI学习笔记结构化Service } from './AI学习笔记结构化Service'
import { router } from '@kit.ArkUI'

@Entry
@Component
struct AI学习笔记结构化Page {
  @State inputData: Record<string, Object> = {}
  @State resultData: AI学习笔记结构化Data | null = null
  @State showResult: boolean = false
  private service: AI学习笔记结构化Service = new AI学习笔记结构化Service()

  build() {
    Column() {
      // 顶部导航栏
      Row() {
        Text('← 返回').fontSize(13).fontColor('#374151')
          .onClick(() => { router.back() })
        Blank()
        Column() {
          Text('📱 AI学习笔记结构化').fontSize(17).fontWeight(FontWeight.Bold)
          Text('CORNELL NOTES · 康奈尔笔记').fontSize(9).fontColor('#6B7280')
        }
        Blank()
        Text('📓').fontSize(22)
      }
      .width('100%').padding({ left: 20, right: 20, top: 16, bottom: 14 })
      .backgroundColor('#F9FAFB')

      Scroll() {
        Column() {
          // 输入区域
          this.buildInputSection()
          // 整理按钮
          Button('📱  整理笔记')
            .width('100%').height(50)
            .backgroundColor('#374151').borderRadius(4)
            .fontColor('#FFFFFF').fontSize(16).fontWeight(FontWeight.Bold)
            .margin({ top: 18, bottom: 14 })
            .onClick(() => {
              this.resultData = this.service.generateData(this.inputData)
              this.showResult = true
            })
          // 结果展示区域
          if (this.showResult && this.resultData !== null) {
            this.buildResultSection()
          }
        }
        .width('100%').padding({ left: 18, right: 18, bottom: 40 })
      }
      .layoutWeight(1)
    }
    .width('100%').height('100%').backgroundColor('#F9FAFB')
  }
}

在展示层的设计中,有以下几个技术要点值得关注:

顶部导航栏采用了三栏布局,左侧是返回按钮,中间是标题和副标题,右侧是一个图标。这种布局在移动应用中非常常见,它利用了 Row 组件的水平排列特性和 Blank 组件的弹性占位特性,实现了两端对齐的视觉效果。返回按钮的点击事件通过 router.back() 方法实现页面回退,这是HarmonyOS标准的路由导航方式。

输入区域使用了 TextInput 组件,这是ArkUI提供的标准文本输入组件。每个输入框都通过 onChange 回调事件监听输入内容的变化,并将值实时更新到 inputData 状态变量中。inputDataRecord<string, Object> 类型,以键值对的形式存储所有输入字段的值,这种设计使得后续扩展新的输入字段非常方便。

结果展示区域采用了条件渲染,通过 if (this.showResult && this.resultData !== null) 判断条件控制渲染行为。当条件不满足时,结果区域不占用任何渲染资源;当条件满足时,框架自动构建结果区域的UI节点树。这种条件渲染策略优化了初始加载性能,避免了不必要的资源消耗。

2.3 模块依赖关系图

模块之间的依赖关系是架构设计的重要维度。在"AI学习笔记结构化"应用中,依赖关系呈现为清晰的金字塔结构:

AI学习笔记结构化Page.ets
    ├── 依赖: AI学习笔记结构化Model.ets (数据类)
    ├── 依赖: AI学习笔记结构化Service.ets (业务逻辑)
    └── 依赖: @kit.ArkUI (router路由)
            │
AI学习笔记结构化Service.ets
    └── 依赖: AI学习笔记结构化Model.ets (数据类)
            │
AI学习笔记结构化Model.ets
    └── 无外部依赖 (纯数据类)

这是一个典型的单向依赖结构,完全符合清洁架构的设计原则。依赖方向从外层指向内层,内层对外层一无所知。具体来说,展示层依赖于业务层和数据层,业务层依赖于数据层,而数据层不依赖于任何外部模块。这种设计带来了几个好处:第一,内层的变化不会影响外层,因为外层依赖于内层,内层不依赖于外层;第二,每个模块都可以独立测试和验证;第三,模块之间的耦合度低,便于后续的维护和升级。

2.4 数据流向图

数据在系统中的流动路径描绘了信息从输入到输出的完整生命周期:

用户输入 ──→ inputData(Record<string, Object>)
                │
                ▼
        AI学习笔记结构化Service.generateData(input)
                │
                ▼
        AI学习笔记结构化Data(结构化结果)
                │
                ▼
        @State resultData 驱动UI更新
                │
                ▼
        展示层渲染结构化视图
                │
                ├── main_notes (主笔记)
                ├── cues[] (线索列表)
                ├── summary (摘要)
                ├── knowledge_map[] (知识图谱)
                ├── concept (核心概念)
                ├── relation (关系描述)
                ├── linked_to (关联链接)
                ├── flashcards[] (闪卡列表)
                ├── front/back (闪卡问答)
                ├── review_schedule (复习计划)
                └── gaps[] (知识缺口)

这条数据流是单向的、不可逆的。数据从用户输入开始,经过Service的处理转换,最终在UI层呈现。每一环节都有明确的数据格式和类型约束,确保数据在传递过程中不会丢失或变形。这种单向数据流的设计模式是ArkUI框架的核心思想,它简化了数据管理和状态追踪的复杂度。

2.5 异常处理策略

在ArkTS环境中,异常处理需要特别关注几个关键点,这些点直接影响着应用的稳定性和用户体验:

空值安全是首要考虑的问题。 在ArkTS中,我们使用 | null 联合类型标记可能为空的对象。例如,resultData 字段的类型被定义为 AI学习笔记结构化Data | null,初始值为 null。在UI渲染前,我们必须进行空值检查,确保只有非空时才能访问其字段。这种显式的空值处理策略避免了运行时空指针异常,提高了代码的健壮性。

类型转换安全同样不可忽视。Record<string, Object> 中取值时,返回值的类型是 Object,需要显式转换为具体类型。我们使用 String() 函数进行显式类型转换,确保类型安全。例如,let notesVal: string = String(input['notes'] || '') 这行代码中,String() 函数将任意类型的值转换为字符串,而 || '' 操作符确保了当 input['notes']undefinednull 时,使用空字符串作为默认值。

UI渲染保护是最后一道防线。 在条件渲染中,我们使用 if (this.showResult && this.resultData !== null) 双重条件保护,确保只有在数据准备就绪时才渲染结果区域。这种双重检查机制既考虑了状态变量 showResult 的语义,又考虑了数据变量 resultData 的空值安全,从两个维度保障了渲染的安全性。

// 空值安全示例
@State resultData: AI学习笔记结构化Data | null = null

// 渲染前的空值检查
if (this.showResult && this.resultData !== null) {
  // 安全渲染...
}

// 类型安全转换
let notesVal: string = String(input['notes'] || '')

三、原子化阶段(Atomize):任务分解与执行规划

3.1 任务分解原则

原子化阶段的核心目标是将复杂任务拆解为可独立执行、可验证的最小工作单元。我们遵循三大基本原则来指导任务分解工作:

单一职责原则要求每个原子任务只关注一个明确的功能点。例如,数据模型的定义是一个独立的任务,UI输入区域的构建是另一个独立的任务,它们之间没有功能重叠。这种分解方式使得每个任务都有清晰的边界和验收标准。

独立可测原则要求每个原子任务完成后可以独立验证。例如,数据模型定义完成后,可以通过编译检查来验证其正确性;Service逻辑实现完成后,可以通过单元测试来验证其功能。这种独立性保证了开发进度可以并行推进,同时也便于问题的定位和修复。

顺序依赖原则要求明确任务之间的依赖关系,确保前置任务完成后才能开始后置任务。例如,Service逻辑的实现依赖于数据模型的定义,因此数据模型任务必须先完成。这种依赖管理方式避免了因任务顺序不当导致的返工和等待。

3.2 原子任务清单

经过细致的分解,我们将"AI学习笔记结构化"应用的开发工作拆分为以下七个原子任务:

任务A-01:数据模型定义与验证。 这个任务的目标是定义 AI学习笔记结构化Data 类,包含所有结构化笔记字段。验收标准包括:类定义通过ArkTS编译,所有字段类型正确,构造函数初始化完整,数组类型字段使用 string[] 语法。预估工时为半小时。这个任务没有外部依赖,可以最先启动。

任务A-02:Service业务逻辑实现。 这个任务的目标是实现 AI学习笔记结构化Service 类,包含 generateData 方法。验收标准包括:方法接受 Record<string, Object> 输入,返回完整的 AI学习笔记结构化Data 实例,Mock数据格式与真实数据格式一致。预估工时为1小时。这个任务依赖于任务A-01的数据模型定义。

任务A-03:输入区域UI构建。 这个任务的目标是构建笔记输入表单,包含"笔记"和"学科类型"两个输入框。验收标准包括:输入框可正常输入,值能正确绑定到 inputData 状态变量,输入框样式符合设计规范,占位文本正确显示。预估工时为1小时。这个任务没有外部依赖,可以并行启动。

任务A-04:结果展示区域UI构建。 这个任务的目标是构建结构化笔记的展示区域,涵盖所有十个数据维度的渲染。验收标准包括:所有数据字段正确展示,列表类型使用 ForEach 循环渲染,空值正确处理,列表项样式符合设计规范。预估工时为2小时。这个任务依赖于任务A-01的数据模型定义,因为需要使用数据类的字段。

任务A-05:交互逻辑串联。 这个任务的目标是串联"整理笔记"按钮点击事件,调用Service生成数据并更新UI。验收标准包括:点击按钮后,showResult 置为 trueresultData 更新为Service返回的数据,结果区域自动渲染。预估工时为半小时。这个任务依赖于任务A-02、A-03和A-04,是三个前置任务的汇合点。

任务A-06:导航与页面集成。 这个任务的目标是集成路由导航,确保从首页可跳转到本页面,并支持返回功能。验收标准包括:点击首页应用卡片跳转到本页面,点击"返回"按钮回到首页,页面标题和副标题正确显示。预估工时为半小时。这个任务依赖于任务A-05。

任务A-07:ArkTS语法合规检查。 这个任务的目标是全面检查代码是否符合ArkTS语法约束。验收标准包括:无编译错误,无 anyunknown 类型使用,无解构赋值,无 Function.bind 调用,无其他ArkTS禁止的语法。预估工时为半小时。这个任务依赖于任务A-06,是所有任务的最后一道质量关卡。

3.3 任务依赖关系图

任务之间的依赖关系可以通过以下图示清晰地表达:

任务A-01 (数据模型) ──→ 任务A-02 (Service逻辑) ──┐
                                                  ├──→ 任务A-05 (交互串联) ──→ 任务A-06 (导航集成) ──→ 任务A-07 (合规检查)
任务A-03 (输入UI) ────────────────────────────────┘
任务A-04 (结果UI) ────────────────────────
Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐