直接跳到内容

Foundation 概览

介绍

Foundation(业务基础设施层)是 core 与 feature 之间的桥梁,提供业务相关的基础能力。它将业务模型、业务路由、业务状态和数据访问能力从 core 层剥离,使 core 层保持纯净,可直接复用到其他项目。

设计目标

  • 业务隔离:将业务相关的代码从框架层剥离,保持 core 层的通用性。
  • 统一数据入口:通过 repository 模式统一管理数据访问,业务层不直接操作数据源。
  • 可扩展:新增业务能力时只需在 foundation 层添加,不影响 core 层。

模块组成

Foundation 层包含 7 个模块,分为两类:

业务能力模块

模块职责包名
biz_model业务实体与请求对象定义@foundation/biz-model
biz_navigation业务路由封装与导航器@foundation/biz-navigation
biz_state业务状态管理@foundation/biz-state

数据访问模块

模块职责包名
database数据库数据源@foundation/database
datastore本地存储数据源@foundation/datastore
network网络数据源@foundation/network
repository仓库层,聚合各数据源@foundation/repository

依赖关系

feature/*

foundation/repository ← foundation/database
    ↓                 ← foundation/datastore
    ↓                 ← foundation/network

foundation/biz_model
foundation/biz_navigation → foundation/biz_state

core/*

数据访问架构

┌─────────────────────────────────────────────────────────────┐
│                    feature (业务层)                          │
│                    ViewModel                                │
├─────────────────────────────────────────────────────────────┤
│                    repository (仓库层)                       │
│         AuthRepository / GoodsRepository / ...              │
├──────────────────┬──────────────────┬───────────────────────┤
│     network      │     database     │      datastore        │
│   网络数据源      │   数据库数据源    │     存储数据源         │
├──────────────────┴──────────────────┴───────────────────────┤
│                    core (框架层)                             │
│         NetworkClient / IBest-ORM / PreferencesUtil         │
└─────────────────────────────────────────────────────────────┘

使用方式

业务层(feature)通过 repository 访问数据:

ts
import { GoodsRepository } from "@foundation/repository";

@ObservedV2
export default class GoodsViewModel extends BaseViewModel {
  private repository: GoodsRepository = new GoodsRepository();

  async loadGoods(): Promise<void> {
    const result = await this.repository.getGoodsInfo("1");
    // 处理结果
  }
}

新增业务能力

新增业务模型

  1. foundation/biz_model/src/main/ets/entity/ 下新增实体类。
  2. foundation/biz_model/Index.ets 中导出。

新增数据源

  1. 根据数据来源选择模块(network/database/datastore)。
  2. 编写数据源接口与实现。
  3. 在对应模块的 Index.ets 中导出。
  4. 在 repository 中聚合使用。

新增仓库

  1. foundation/repository/src/main/ets/ 下新增仓库类。
  2. 注入所需的数据源。
  3. foundation/repository/Index.ets 中导出。