Files
bq_react/doc/项目文档/项目架构.md

96 lines
4.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 项目架构
## 目录
- [项目目录结构](#项目目录结构)
- [模块定义](#模块定义)
- [基础应用](#基础应用)
- [功能模块](#功能模块)
- [模块间数据流](#模块间数据流)
- [项目业务](#项目业务)
## 项目目录结构
本仓库是脚手架。`src/app` 是每个项目保留的基础应用。`src/features` 下的四个目录是示例业务,用来示范功能模块如何接入;新项目可以替换它们。
```text
src/
├── app/
│ ├── db/
│ ├── di/
│ ├── i18n/
│ ├── lifecycle/
│ ├── network/
│ ├── routes/
│ ├── session/
│ ├── theme/
│ ├── worker/
│ ├── entry.client.tsx
│ ├── root.tsx
│ └── routes.ts
├── assets/
└── features/
├── editor/
├── home/
├── project/
└── security/
```
## 模块定义
`src/app` 下每个目录是一个基础应用,供功能模块和路由使用。`src/features` 下每个目录是一个功能模块,承载一块业务。功能模块的定义写它的 application 用例。
### 基础应用
| 模块 | 目录 | 定义 |
| --------------------------------- | ------------------- | ---------------------------- |
| [数据库](./基础应用/数据库(Database).md) | `src/app/db` | 打开本地库并按版本升级表结构 |
| [依赖注入](./基础应用/依赖注入(DI).md) | `src/app/di` | 提供根容器,并把端口绑定到实现 |
| [国际化](./基础应用/国际化(i18n).md) | `src/app/i18n` | 注册文案并按当前语言取出文本 |
| [生命周期](./基础应用/生命周期(lifecycle).md) | `src/app/lifecycle` | 创建页面 ViewModel,并在进入、刷新、离开时回调 |
| [网络](./基础应用/网络(network).md) | `src/app/network` | 提供 HTTP 客户端,附带凭证并处理 401 |
| [路由](./基础应用/路由(routes).md) | `src/app/routes` | 把 URL 指到页面,并按会话决定能否进入 |
| [会话](./基础应用/会话(session).md) | `src/app/session` | 保存、读取、清除登录凭证,并通知登录态变化 |
| [主题](./基础应用/主题(theme).md) | `src/app/theme` | 解析当前主题,并交给界面库 |
| [线程脚本](./基础应用/线程脚本(WebWorker).md) | `src/app/worker` | 封装 Worker 的消息会话 |
### 功能模块
| 模块 | 目录 | 定义 |
| ------------------------------------ | ----------------------- | ---------------------------- |
| [编辑器](./功能模块/编辑器模块/编辑器模块(editor).md) | `src/features/editor` | 把指针和当前工具提交给项目聚合,不持有文档规则 |
| [首页](./功能模块/首页/首页(home).md) | `src/features/home` | 不持有独立用例,调用项目模块按存储位置列出与新建 |
| [项目](./功能模块/项目模块/项目模块(project).md) | `src/features/project` | 维护项目聚合:创建、列出、读取、保存,以及落笔、撤销和重做 |
| [安全](./功能模块/安全模块/安全模块(security).md) | `src/features/security` | 提供身份用例:注册、登录和登出。登录得到 `User` |
## 模块间数据流
### 项目业务
```mermaid
flowchart LR
security
home
project
editor
security -->|authenticated| home
home -->|list / create| project
project -->|projectId / store| home
home -->|projectId / store| editor
editor -->|get / save| project
```
`home` 先读取 `security` 的 `authenticated`。已登录时,`home` 通过 `list` 或 `create` 向 `project` 要项目,拿到 `projectId` 和 `store` 后再交给 `editor`。未登录时,`projectId` 无法流转至 `editor`。
`store` 只表示应用层选择本地仓储还是远程仓储,不是 `Project` 的字段。进入 `editor` 后,`get` 载入聚合。落笔、撤销和重做由 `Project` 执行,再经 `save` 写回。