Files
bq_react/doc/项目文档/功能模块/编辑器模块/编辑器模块(editor).md

3.0 KiB

编辑器模块

目录

模块目录结构

src/features/editor/
├── domain/
│   ├── entities/
│   │   └── draft_shape.ts
│   └── enum/
│       └── editor_tool.ts
└── presentation/
    └── editor/
        ├── editor.tsx
        ├── editor.scss
        └── editor_view_model.ts

编辑器不定义自己的聚合和用例。文档规则在项目模块的 Project 上。当前工具和未落笔的草稿是编辑器自己的领域对象。

功能定义

编辑器把页面动作提交给已经载入的 Project,再交给项目用例保存。

  • 按 projectId 和 store 载入聚合。
  • 按当前工具收集指针草稿,落笔时调用 Project.addShape。
  • 调用 Project.undo 或 Project.redo,再保存。

核心业务层

EditorViewModel

编辑页的状态和操作。文件:src/features/editor/presentation/editor/editor_view_model.ts。继承 PageViewModel。

状态:project、store、tool、draft、errorMessage。撤销栈不在这里。

方法 说明
open(id: string, store: string | null): Promise<void> 按 store 读取 Project,并清空 draft
setTool(tool: EditorTool): void 切换 EditorTool.LINE 或 EditorTool.RECT
pointerDown(x: number, y: number): void 在已有项目时记下草稿起点
pointerMove(x: number, y: number): void 更新草稿终点
pointerUp(): void 用草稿调用 Project.addShape,接受后保存
undo(): void 调用 Project.undo,成功后保存
redo(): void 调用 Project.redo,成功后保存

store 只记录这次页面从本地还是远程打开,供 ProjectApplication.get 和 save 选择仓储。

核心模型

编辑器定义当前工具和未落笔的草稿。已提交的图形和撤销规则仍在项目模块的 Project 上,见 项目模块。

类型 文件 定义
EditorTool src/features/editor/domain/enum/editor_tool.ts 当前工具。LINE 与 RECT
DraftShape src/features/editor/domain/entities/draft_shape.ts 一笔尚未提交的草稿。持有工具和起点、终点
flowchart LR
  EditorViewModel((EditorViewModel))
  open([open])
  addShape([addShape])
  undo([undo])
  redo([redo])
  Project

  EditorViewModel --> open
  EditorViewModel --> addShape
  EditorViewModel --> undo
  EditorViewModel --> redo
  open --> Project
  addShape --> Project
  undo --> Project
  redo --> Project

open 载入 Project。addShape、undo、redo 都调用这个聚合根,不调用 Document。

业务文档