📚 鸿蒙进阶专栏 · 第 16 篇 / 共 20 篇(进阶篇 11-20)
上一篇:异步并发:async/await 与 Promise | 下一篇:动效入门:属性动画与转场动画

目录

项目分层架构:从一锅粥到清晰三层

一、目录结构长这样

二、动手改造:从面条代码到三层

三、分层的收益,用场景说话

四、多模块(HAP/HAR/HSP)预告

五、下一篇预告


 

项目分层架构:从一锅粥到清晰三层

当页面代码超过 300 行、接口超过 10 个,就该分层了。这篇给出鸿蒙项目最实用的三层结构,并动手改造第 9 篇的网络请求。

一、目录结构长这样

MyApp/entry/src/main/ets/
├── pages/                 # 表现层:页面,只管 UI
│   ├── Index.ets
│   └── NoteDetail.ets
├── components/            # 通用组件(第 11 篇)
├── viewmodels/            # 视图模型:状态 + 业务逻辑
│   └── NoteViewModel.ets
├── models/                # 数据层
│   ├── Note.ets           # 实体类
│   ├── NoteApi.ets        # 网络接口
│   └── NoteDao.ets        # 数据库
└── common/                # 工具:http 封装、常量、日志

二、动手改造:从面条代码到三层

// models/Note.ets —— 实体
export class Note {
  id: number = 0
  title: string = ''
  content: string = ''
}

// common/HttpUtil.ets —— 网络封装
import { http } from '@kit.NetworkKit'
export async function get<T>(url: string): Promise<T> {
  const req = http.createHttp()
  try {
    const res = await req.request(url, { method: http.RequestMethod.GET })
    if (res.responseCode !== 200) throw new Error(`HTTP ${res.responseCode}`)
    return JSON.parse(res.result as string) as T
  } finally {
    req.destroy()
  }
}

// models/NoteApi.ets —— 数据源
import { Note } from './Note'
export function fetchNotes(): Promise<Note[]> {
  return get<Note[]>('https://api.example.com/notes')
}

// viewmodels/NoteViewModel.ets —— 业务
import { Note, fetchNotes } from '../models/NoteApi'
export class NoteViewModel {
  private _notes: Note[] = []
  get notes(): Note[] { return this._notes }

  async load(): Promise<void> {
    this._notes = await fetchNotes()
  }
}

页面里只剩三行:创建 ViewModel、调 load()、渲染 notes。

三、分层的收益,用场景说话

场景不分层分层后
接口地址变了全项目搜索替换十几处只改 NoteApi.ets
从网络换成数据库重写页面代码只换数据源,UI 零改动
新人接手读 3000 行面条看目录就知道在哪改

四、多模块(HAP/HAR/HSP)预告

更大的项目会拆成多个模块:entry(主包)+ HAR(静态共享包,放工具和组件)+ HSP(动态共享包,放业务模块)。这是应用市场上架 2GB+ 大应用的必经之路,作为专题留到后续。

五、下一篇预告

功能齐了,怎么让界面「活」起来?下一篇:鸿蒙动效,三种武器让按钮、列表、页面都会动。


进阶系列持续更新中,点赞 + 收藏 + 关注不迷路。
遇到问题评论区贴报错信息 + 关键代码,看到都会回。也欢迎留言点播你想看的进阶主题。

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐