2.5 KiB
2.5 KiB
首页
目录
模块目录结构
src/features/home/
└── presentation/
└── home/
├── home.tsx
├── home.scss
└── home_view_model.ts
首页没有 application、domain、infra。
功能定义
首页不持有独立用例。它调用项目模块的 list 和 create。
- 进入页面时按
local与remote各列出一份项目。 - 新建时调用
ProjectApplication.create。聚合由Project.create生成,再按store保存。
已登录状态来自安全模块一侧的 authenticated。未登录时,projectId 不交给编辑器。
核心业务层
HomeViewModel
首页的项目列表状态。文件:src/features/home/presentation/home/home_view_model.ts。继承 PageViewModel。
状态:cloudProjects、localProjects、errorMessage。
| 方法 | 说明 |
|---|---|
ready(): Promise<void> |
进入页面时调用 reload |
reload(): Promise<void> |
调用 ProjectApplication.list(ProjectStore.REMOTE) 和 list(ProjectStore.LOCAL) |
createLocal(): Promise<Project> |
调用 ProjectApplication.create(ProjectStore.LOCAL) |
local 和 remote 是传给用例的 store,用来选择仓储。它们不是 Project 的属性。
核心模型
首页不定义实体。它使用项目模块的聚合根 Project。
flowchart LR
HomeViewModel((HomeViewModel))
list([list])
create([create])
Project
HomeViewModel --> list
HomeViewModel --> create
list --> Project
create --> Project
list 的结果写入 cloudProjects 或 localProjects。create 返回新建的 Project。
核心业务
列出并新建
sequenceDiagram
participant HomeViewModel
participant ProjectApplication
participant Project
HomeViewModel->>ProjectApplication: list(remote)
HomeViewModel->>ProjectApplication: list(local)
HomeViewModel->>ProjectApplication: create(local)
ProjectApplication->>Project: create(name)
ProjectApplication-->>HomeViewModel: Project
ready 触发两次 list。其中一次失败时,对应列表为空,错误写入 errorMessage。create 返回的 Project.id 与本次使用的 store 一起交给编辑器。