鸿蒙开发别再堆代码了!手把手教你用 ArkTS 实现模块化架构

摘要

在鸿蒙应用开发中,随着功能逐步复杂化,一个文件几百行代码的情况越来越常见。面对多人协作、需求频繁变动、功能模块庞大等场景,如果还把所有逻辑堆在一起,不仅开发难度高,后期维护也成了灾难。这个时候,就需要"模块化开发"来帮我们分而治之。本文将结合 ArkTS 的特性,讲解如何进行模块拆分、组件组织、路由管理以及数据状态隔离等模块化开发策略。

引言

随着鸿蒙生态逐渐成熟,越来越多的应用开始向 ArkTS 转型。很多开发者都会遇到一个共性问题:代码结构混乱、模块耦合太重、维护成本高。尤其是在大型项目中,UI、业务逻辑、网络请求、数据管理全部混杂在一起,一旦要改动一个小功能,可能牵一发而动全身。

ArkTS 提供了灵活的模块组织能力,我们可以借助其语法特性(如 import/export)、组件机制、页面路由和状态管理机制,实现真正的"模块解耦"。下面我们通过一个个具体模块和示例,来看看如何落地。

模块一:功能逻辑模块的拆分

基础做法:export / import 拆分

目的: 把功能函数或类拆出来,按职责归类,提高复用性和可维护性。

示例代码

ts 复制代码
// utils/mathUtils.ts
export function add(a: number, b: number): number {
  return a + b;
}

export function subtract(a: number, b: number): number {
  return a - b;
}
ts 复制代码
// pages/CalculatorPage.ets
import { add, subtract } from '../utils/mathUtils';

@Entry
@Component
struct CalculatorPage {
  build() {
    Row() {
      Column() {
        Text(`2 + 3 = ${add(2, 3)}`)
        Text(`5 - 2 = ${subtract(5, 2)}`)
      }
    }
  }
}

效果

  • 功能复用简单
  • 后续要扩展乘除功能,只需在 mathUtils.ts 中加即可
  • CalculatorPage 页面更清爽,职责更明确

模块二:组件化 UI 构建

为什么组件很关键?

开发 UI 的时候,一开始你可能只是写一个页面,但后来你发现------顶部栏、商品卡片、按钮样式这些地方重复率特别高。如果不封装组件,你得到处复制粘贴,出问题了得全局搜一遍才能改完,太费劲了。

示例代码

ts 复制代码
// components/UserCard.ets
@Component
export struct UserCard {
  @Prop name: string;
  @Prop age: number;

  build() {
    Column({ space: 5 }) {
      Text(`Name: ${this.name}`)
        .fontSize(16)
      Text(`Age: ${this.age}`)
        .fontSize(14)
    }
    .padding(10)
    .border({ width: 1 })
  }
}
ts 复制代码
// pages/UserListPage.ets
import { UserCard } from '../components/UserCard';

@Entry
@Component
struct UserListPage {
  build() {
    Column() {
      UserCard({ name: '张三', age: 20 })
      UserCard({ name: '李四', age: 25 })
    }
  }
}

好处

  • 实现一次,到处使用
  • 样式统一、维护简单
  • 不同项目间也能快速迁移

模块三:模块化的页面与路由管理

页面模块化 + 路由注册方式

在鸿蒙中,页面通过 pages 文件夹组织,可以通过 router.pushUrl() 方式跳转。每个页面就是一个模块,我们可以按功能场景将其拆分成多个子模块目录。

示例结构

css 复制代码
src/
├── pages/
│   ├── HomePage.ets
│   ├── Product/
│   │   ├── ProductList.ets
│   │   └── ProductDetail.ets
│   └── User/
│       ├── Login.ets
│       └── Profile.ets

示例代码

ts 复制代码
// pages/HomePage.ets
@Entry
@Component
struct HomePage {
  build() {
    Column() {
      Button("去商品列表页")
        .onClick(() => {
          router.pushUrl('pages/Product/ProductList');
        })
    }
  }
}
ts 复制代码
// pages/Product/ProductList.ets
@Entry
@Component
struct ProductList {
  build() {
    Column() {
      Text("这是商品列表页")
    }
  }
}

优点

  • 页面之间解耦
  • 可按模块维护某类页面
  • 支持按需加载(未来支持动态模块加载)

模块四:模块化的数据和状态管理

对于模块内部的状态,我们不建议全局暴露。可以通过 ArkTS 的 @State@Link@Prop 或封装专用状态管理类,来实现模块内部的数据隔离与通信。

示例:模块状态封装

ts 复制代码
// store/userStore.ts
export class UserStore {
  name: string = '';
  isLogin: boolean = false;

  login(name: string) {
    this.name = name;
    this.isLogin = true;
  }

  logout() {
    this.name = '';
    this.isLogin = false;
  }
}
ts 复制代码
// pages/Login.ets
import { UserStore } from '../store/userStore';

@Entry
@Component
struct Login {
  private store: UserStore = new UserStore();

  build() {
    Column() {
      Button("登录张三")
        .onClick(() => {
          this.store.login("张三");
        })
      Text(`当前用户:${this.store.name}`)
    }
  }
}

实际场景举例

场景一:商城系统的模块化

模块划分:

  • 用户模块(登录、注册、用户信息)
  • 商品模块(列表、详情、下单)
  • 订单模块(历史订单、订单详情)
  • 公共模块(导航栏、卡片组件)

效果: 每个模块独立开发、调试;多个成员并行协作;后续可替换、独立升级。

场景二:智能家居应用

模块划分:

  • 设备控制模块(灯光、空调)
  • 场景管理模块(回家、离家模式)
  • 用户中心模块(账户管理、通知)

配合组件化: 封装 DeviceCardSceneButtonUserInfo 等组件,提升复用性。

场景三:表单系统

模块划分:

  • 输入组件(InputField、Dropdown)
  • 校验模块(规则校验器)
  • 提交模块(按钮、状态展示)

实现效果: 表单配置驱动,动态生成页面,结构清晰,维护方便。

QA 环节

Q1:模块间如何传值? 可以通过 @Prop 或构造函数传值;跨模块共享数据可以使用全局状态管理类或者 EventBus。

Q2:模块化是否会影响性能? 不会,模块化本质是组织结构优化,合理划分模块还能带来按需编译、页面懒加载等性能提升空间。

Q3:组件太多会不会不好管理? 建议统一放在 components/ 文件夹下,按类型/业务归类;命名统一规范(如 UserCard, ProductItem),可配合文档或 Storybook 管理。

总结

在 ArkTS 中进行模块化开发,能显著提升项目结构清晰度、开发效率和可维护性。通过拆分功能模块、组件封装、页面路由隔离、状态管理模块化,我们可以构建出一套可扩展、易协作的应用架构。无论是个人项目还是多人团队,建议都从一开始就遵循模块化思维,让项目从小就养成"好结构"的习惯。

如需进一步实战示例或模块拆分策略优化,欢迎继续深入探讨。模块化,不止是技巧,更是一种开发哲学。

相关推荐
kymjs张涛1 小时前
HarmonyOS Next 全兼容,三端统一的路由跳转方案
harmonyos
前端世界3 小时前
鸿蒙系统下的动态负载均衡实战:让分布式任务调度更智能
分布式·负载均衡·harmonyos
HarmonyOS小助手3 小时前
餐饮服务与软件创新的融合:解析海底捞 APP 的 Flutter 鸿蒙开发之路
harmonyos·鸿蒙·鸿蒙生态
万少4 小时前
HarmonyOS 读取系统相册图片并预览
前端·harmonyos·客户端
zhanshuo5 小时前
ArkTS 多线程实战指南:让你的鸿蒙应用又快又丝滑!
harmonyos
HarmonyOS_SDK6 小时前
HarmonyOS SDK使能美团高效开发,打造优质创新应用体验
harmonyos
zhanshuo20 小时前
HarmonyOS 分布式神器!手把手教你用 ArkTS 写出全屋联动智能助手
harmonyos
zhanshuo20 小时前
让你的鸿蒙应用“离线也能飞”——ArkTS 存储机制实战
harmonyos
AORO20251 天前
国产智能三防手机哪款最好?这款支持单北斗、5G-A、IP68
5g·安全·智能手机·信息与通信·harmonyos