4.2 KiB
4.2 KiB
项目架构
目录
项目目录结构
本仓库是脚手架。src/app 是每个项目保留的基础应用。src/features 下的四个目录是示例业务,用来示范功能模块如何接入;新项目可以替换它们。
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 用例。
基础应用
| 模块 | 目录 | 定义 |
|---|---|---|
| 数据库 | src/app/db |
打开本地库并按版本升级表结构 |
| 依赖注入 | src/app/di |
提供根容器,并把端口绑定到实现 |
| 国际化 | src/app/i18n |
注册文案并按当前语言取出文本 |
| 生命周期 | src/app/lifecycle |
创建页面 ViewModel,并在进入、刷新、离开时回调 |
| 网络 | src/app/network |
提供 HTTP 客户端,附带凭证并处理 401 |
| 路由 | src/app/routes |
把 URL 指到页面,并按会话决定能否进入 |
| 会话 | src/app/session |
保存、读取、清除登录凭证,并通知登录态变化 |
| 主题 | src/app/theme |
解析当前主题,并交给界面库 |
| 线程脚本 | src/app/worker |
封装 Worker 的消息会话 |
功能模块
| 模块 | 目录 | 定义 |
|---|---|---|
| 编辑器 | src/features/editor |
把指针和当前工具提交给项目聚合,不持有文档规则 |
| 首页 | src/features/home |
不持有独立用例,调用项目模块按存储位置列出与新建 |
| 项目 | src/features/project |
维护项目聚合:创建、列出、读取、保存,以及落笔、撤销和重做 |
| 安全 | src/features/security |
提供身份用例:注册、登录和登出。登录得到 User |
模块间数据流
项目业务
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 写回。