# 项目架构文档撰写说明 适用文件:`doc/项目架构.md`。 ## 目录 - [1. 项目目录结构](#1-项目目录结构) - [2. 模块定义](#2-模块定义) - [3. 模块间数据流](#3-模块间数据流) 示例见 [项目架构(示例)](./项目架构(示例).md)。 ## 1. 项目目录结构 用目录树写出 `src`。`src/app` 展开到每个基础应用目录。`src/features` 展开到 `features/[feature]`,不写模块内部。 模块内部目录由功能模块文档写。基础应用内部文件由使用示例和数据流体现。 ## 2. 模块定义 先用一段话定义本仓库的模块:`src/app/<目录>` 是基础应用,`src/features/<目录>` 是功能模块。 然后分「基础应用」「功能模块」两张表。每行:名称、目录、这个模块做什么。表中的目录与上一节一致,不多出、不漏掉。 功能模块的定义写 application 层的业务,也就是该模块对外提供的用例。不写页面上的操作,不写 ViewModel。ViewModel 是页面业务,放在功能模块文档。模块没有自己的 application 时,写明它不持有独立用例,以及它调用哪个模块的用例。 ## 3. 模块间数据流 只画功能模块之间的业务数据。节点是 `home`、`security`、`project`、`editor`。箭头文字使用在模块之间传递的方法名或字段名,例如 `list`、`projectId`。中文写在图下。 不画基础应用,例如 `session`、`network`、`db`、`routes`。不画时序,不写类内部的调用步骤。基础应用内部的数据流和时序写在基础应用文档。功能模块内部的时序写在功能模块文档。 一条业务一张图。图下用几句话说明业务数据从哪个功能模块到哪个功能模块。决定下游数据能否继续流动的状态必须画出来。例如 `home` 先取得 `security` 的 `authenticated`,才从 `project` 取得 `projectId`,再交给 `editor`。