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");
// 处理结果
}
}新增业务能力
新增业务模型
- 在
foundation/biz_model/src/main/ets/entity/下新增实体类。 - 在
foundation/biz_model/Index.ets中导出。
新增数据源
- 根据数据来源选择模块(network/database/datastore)。
- 编写数据源接口与实现。
- 在对应模块的
Index.ets中导出。 - 在 repository 中聚合使用。
新增仓库
- 在
foundation/repository/src/main/ets/下新增仓库类。 - 注入所需的数据源。
- 在
foundation/repository/Index.ets中导出。