Skip to Content
Week 12Day 4 - 文档完善

Day 4 - 文档完善

建议用时:180-210 分钟

你将学会什么

  • 写清项目入口文档 README.md
  • 写清用户操作文档 USER_GUIDE.md
  • 写清排错文档 TROUBLESHOOTING.md
  • 写清交付检查清单 RELEASE_CHECKLIST.md
  • 把“项目能运行”变成“别人能照着运行”

文档不是作文。文档的目标是让人照着做:能启动、能使用、出错能处理、交付能检查。

本页固定顺序

  1. 先学第一部分:弄懂今天最小、最重要的知识,并运行短例子。
  2. 再学第二部分:把刚学的知识组合成一个完整例子。
  3. 然后做第三部分:自己跟着敲,再完成重复训练和每日小测。
  4. 最后做第四部分:先独立完成作业,再用完整答案检查。

今天只抓住 3 件事

  1. 文档的目标是让别人能运行、能使用、能排错。
  2. 不同文档负责不同问题,不能把所有内容堆进一个文件。
  3. 好文档必须写清命令、路径、步骤、现象、处理办法。

学习衔接

上一页学习的是“测试补齐”,今天继续学习“文档完善”。先使用上一页已经会的写法,再只增加今天这个新知识点;如果前置内容还不能独立敲出,先回上一页复习,不要硬跳。

第一部分:先学原理和最小知识

这一部分只读,不敲代码。

为什么项目最后一定要写文档

代码能在你的电脑上运行,不代表别人能运行。

常见交付问题不是功能完全坏了,而是别人不知道:

  • 该打开哪个目录。
  • 该执行哪条命令。
  • 需要哪个 .NET SDK 版本。
  • 数据保存在哪里。
  • 报错时第一步检查什么。

文档就是把这些隐含信息写出来。隐含信息越少,项目越容易接手。

README 应该写什么

README.md 是项目入口。它不负责解释所有细节,只负责让人快速知道项目是什么、怎么跑起来。

至少包含:

  • 项目用途。
  • 功能范围。
  • 运行环境。
  • 启动步骤。
  • 数据位置。
  • 常用命令。
  • 文档入口。

用户手册应该写什么

USER_GUIDE.md 写给真正使用软件的人看。它不应该出现大量代码和技术术语,而应该按界面操作顺序写。

比如新增商品要写成:

  1. 打开主窗口。
  2. 在“商品名称”输入框输入名称。
  3. 在“价格”输入框输入大于 0 的数字。
  4. 点击“保存”。
  5. 在商品列表确认新增结果。

这样写的好处是:用户不用理解 ViewModel、绑定、JSON,也能完成操作。

排错文档应该写什么

TROUBLESHOOTING.md 专门写失败情况。

每个问题用固定结构:

  • 现象:看到了什么。
  • 可能原因:为什么会这样。
  • 处理办法:按什么顺序处理。

比如:

现象:执行 dotnet run 失败。 可能原因:没有安装 .NET SDK,或者 SDK 版本太低。 处理办法:先执行 dotnet --version,确认版本是 8 或更高。

检查清单应该写什么

RELEASE_CHECKLIST.md 是发布前最后一遍检查。

检查清单要写成能打勾的条目,不写空话。

好的写法:

- [ ] 新增商品时,名称为空会显示错误提示。 - [ ] 搜索商品时,输入关键词后列表会变少。 - [ ] 关闭应用后重新打开,商品数据仍然存在。

不好的写法:

- [ ] 功能正常。 - [ ] 体验良好。 - [ ] 质量不错。

因为“正常、良好、不错”都无法直接验收。

第二部分:把知识组合成完整例子

今天不新增功能,专门补文档。

一个能交付的桌面项目,至少要让接手的人知道四件事:

  • 怎么运行。
  • 怎么使用。
  • 出错怎么处理。
  • 发布前怎么检查。

所以今天写 4 个文件:

README.md docs/USER_GUIDE.md docs/TROUBLESHOOTING.md docs/RELEASE_CHECKLIST.md

这 4 个文件分工不同:

文件负责什么谁会看
README.md项目入口、环境、启动命令开发者、接手项目的人
USER_GUIDE.md用户怎么点界面完成操作使用软件的人
TROUBLESHOOTING.md常见错误和处理办法遇到问题的人
RELEASE_CHECKLIST.md发布前逐项检查负责交付的人

先看最小 README

# 商品管理应用 ## 第三部分:跟着写文档 从这里开始动手。下面给出完整文档,可以直接放进项目里。 ### 第 1 步:创建文档目录 在项目根目录创建: ```text docs

然后准备 4 个文件:

README.md docs/USER_GUIDE.md docs/TROUBLESHOOTING.md docs/RELEASE_CHECKLIST.md

第 2 步:写 README.md

在项目根目录创建 README.md

# 商品管理应用 ## 项目用途 这是一个本地桌面商品管理应用,用于练习 C#、Avalonia、MVVM、文件保存、搜索筛选、权限、导入导出、日志和发布流程。 应用支持: - 查看商品列表。 - 新增商品。 - 编辑商品。 - 删除商品。 - 按关键词搜索商品。 - 保存商品数据到本地 JSON 文件。 - 导入和导出 CSV 文件。 - 记录关键操作日志。 ## 运行环境 - .NET SDK 8 或更高版本。 - macOS、Windows 或 Linux。 - 能执行 `dotnet` 命令的终端。 ## 启动步骤 1. 打开项目根目录。 2. 执行依赖还原: ```bash dotnet restore ``` 3. 启动应用: ```bash dotnet run ``` 4. 如果项目有多个 `.csproj` 文件,进入 Avalonia 应用所在目录后再执行 `dotnet run` ## 常用命令 ```bash dotnet restore dotnet build dotnet run dotnet test dotnet publish -c Release ``` ## 数据保存位置 商品数据保存到本地 JSON 文件。具体路径由代码里的仓储类决定,通常位于应用数据目录。 如果数据没有保存成功,请先检查: - 应用是否有写入权限。 - JSON 文件是否被其他程序占用。 - 日志文件里是否有保存失败原因。 ## 文档入口 - 用户操作说明:`docs/USER_GUIDE.md` - 常见问题处理:`docs/TROUBLESHOOTING.md` - 发布检查清单:`docs/RELEASE_CHECKLIST.md`

第 3 步:写 USER_GUIDE.md

docs/USER_GUIDE.md 写入:

# 用户操作说明 ## 打开应用 1. 启动商品管理应用。 2. 等待主窗口显示商品列表。 3. 如果列表为空,页面会显示“暂无商品”之类的提示。 ## 新增商品 1. 找到商品名称输入框。 2. 输入商品名称,例如 `Keyboard` 3. 输入价格,例如 `199` 4. 输入库存,例如 `10` 5. 点击“保存”。 6. 在商品列表里确认新增的商品出现。 ## 编辑商品 1. 在商品列表中选中一个商品。 2. 修改名称、价格或库存。 3. 点击“保存”或“更新”。 4. 确认列表中的商品信息已经变化。 ## 删除商品 1. 在商品列表中选中一个商品。 2. 点击“删除”。 3. 如果出现确认提示,确认要删除。 4. 确认商品从列表中消失。 ## 搜索商品 1. 在搜索框输入关键词,例如 `key` 2. 商品列表会只显示名称包含关键词的商品。 3. 清空搜索框后,列表恢复显示全部商品。 ## 导入 CSV 1. 点击“导入”。 2. 选择 CSV 文件。 3. 等待导入完成提示。 4. 查看成功数量和失败数量。 CSV 建议格式: ```text Id,Name,Price,Stock 1,Keyboard,199,10 2,Mouse,99,20 ``` ## 导出 CSV 1. 点击“导出”。 2. 选择保存位置。 3. 导出完成后,打开 CSV 文件确认内容。 ## 常见输入规则 - 商品名称不能为空。 - 价格必须是大于 0 的数字。 - 库存必须是大于或等于 0 的整数。 - 删除商品前要先选中商品。

第 4 步:写 TROUBLESHOOTING.md

docs/TROUBLESHOOTING.md 写入:

# 常见问题处理 ## 执行 dotnet run 失败 ### 现象 终端提示找不到 `dotnet`,或者提示 SDK 版本不匹配。 ### 可能原因 - 没有安装 .NET SDK。 - 安装的是 Runtime,不是 SDK。 - SDK 版本低于项目要求。 ### 处理办法 1. 执行: ```bash dotnet --version ``` 2. 如果命令不存在,安装 .NET SDK。 3. 如果版本过低,升级到项目要求的版本。 4. 回到项目目录重新执行: ```bash dotnet restore dotnet run ``` ## 保存数据失败 ### 现象 点击保存后,界面提示保存失败,或者重新打开应用后数据消失。 ### 可能原因 - 数据文件没有写入权限。 - 数据文件被其他程序占用。 - JSON 文件格式已经损坏。 ### 处理办法 1. 关闭正在打开数据文件的编辑器。 2. 查看日志文件里的错误原因。 3. 检查数据目录是否允许当前用户写入。 4. 如果 JSON 文件损坏,先备份文件,再用空数组 `[]` 重建文件。 ## CSV 导入失败 ### 现象 导入后部分数据没有进入列表。 ### 可能原因 - CSV 标题不正确。 - 价格不是数字。 - 库存不是整数。 - 商品名称为空。 ### 处理办法 1. 确认 CSV 第一行是: ```text Id,Name,Price,Stock ``` 2. 确认价格列都是数字。 3. 确认库存列都是整数。 4. 重新导入并查看失败数量。 ## 删除按钮不可用 ### 现象 删除按钮是灰色的,无法点击。 ### 可能原因 没有选中商品,或者当前账号没有删除权限。 ### 处理办法 1. 先在列表中选中商品。 2. 确认当前角色是否允许删除。 3. 如果仍然不可用,查看权限配置或日志。

第 5 步:写 RELEASE_CHECKLIST.md

docs/RELEASE_CHECKLIST.md 写入:

# 发布检查清单 ## 环境检查 - [ ] `dotnet --version` 能正常输出版本。 - [ ] `dotnet restore` 执行成功。 - [ ] `dotnet build` 执行成功。 - [ ] `dotnet test` 执行成功。 ## 功能检查 - [ ] 新增商品成功后,列表出现新商品。 - [ ] 商品名称为空时,保存会显示错误提示。 - [ ] 价格小于等于 0 时,保存会显示错误提示。 - [ ] 库存小于 0 时,保存会显示错误提示。 - [ ] 编辑商品后,列表显示最新内容。 - [ ] 删除商品前需要选中商品。 - [ ] 搜索关键词后,列表会过滤。 - [ ] 清空搜索后,列表恢复。 ## 数据检查 - [ ] 关闭应用后重新打开,商品数据仍然存在。 - [ ] JSON 文件损坏时,应用能给出可理解的错误提示。 - [ ] CSV 导入能显示成功数量和失败数量。 - [ ] CSV 导出后,文件能被表格软件打开。 ## 发布检查 - [ ] `dotnet publish -c Release` 执行成功。 - [ ] 发布目录里有可执行文件。 - [ ] README、用户手册、排错文档已更新。 - [ ] CHANGELOG 已写清本次变化。 - [ ] 已知问题已经记录。

第 6 步:检查文档是否能照做

文档写完以后,按这个顺序自己走一遍:

  1. 只看 README.md,能不能启动项目。
  2. 只看 USER_GUIDE.md,能不能完成新增、编辑、删除、搜索。
  3. 只看 TROUBLESHOOTING.md,遇到启动失败、保存失败、导入失败时有没有处理办法。
  4. 只看 RELEASE_CHECKLIST.md,发布前检查项是否能逐条打勾。

如果某一步需要靠口头解释,说明文档还没写清。

项目用途

用于管理本地商品数据,支持新增、编辑、删除、搜索和本地保存。

运行环境

  • .NET SDK 8 或更高版本

启动步骤

  1. 打开项目目录。
  2. 执行 dotnet restore
  3. 执行 dotnet run
这不是最终文档,但已经有三个关键点:项目用途、运行环境、启动步骤。 ## 文档常用操作速查 | 需求 | 文件 | 必须包含 | | --- | --- | --- | | 项目入口 | `README.md` | 项目用途、环境、启动命令、数据位置 | | 用户操作 | `docs/USER_GUIDE.md` | 新增、编辑、删除、搜索、导入导出 | | 排错说明 | `docs/TROUBLESHOOTING.md` | 现象、可能原因、处理办法 | | 发布检查 | `docs/RELEASE_CHECKLIST.md` | 环境、功能、数据、发布目录 | | 版本变化 | `CHANGELOG.md` | 新增、修复、文档、已知问题 | | 已知问题 | `docs/KNOWN_ISSUES.md` | 影响、临时处理、后续计划 | ## 常见错误和修法 | 错误 | 为什么错 | 修法 | | --- | --- | --- | | README 只写项目名 | 接手的人不知道怎么运行 | 补环境、恢复依赖、启动命令 | | 用户手册写太多代码 | 使用者不关心实现细节 | 按界面操作步骤写 | | 排错文档只写“重试” | 没有定位方向 | 写清现象、可能原因、处理办法 | | 数据路径没写 | 换电脑后不知道文件在哪里 | 在 README 和排错文档里写路径 | | 检查清单没有结果 | 发布前无法证明检查过 | 每项写通过、失败、备注 | ## 小白重复敲写训练 文档日仍然要敲代码:练公开 API 注释、启动命令和最小示例。 ### 训练 1:给公开方法写 XML 注释 ```csharp /// <summary> /// 根据单价和数量计算总价。 /// </summary> /// <param name="price">单价,必须大于等于 0。</param> /// <param name="count">数量,必须大于等于 0。</param> /// <returns>计算后的总价。</returns> public decimal CalculateTotal(decimal price, int count) { return price * count; }

训练 2:写可执行的 README 命令

dotnet restore dotnet build dotnet run --project src/ProductManager.App dotnet test

逐条实际运行,不能写没有验证过的命令。

训练 3:写最小使用示例

var service = new ProductService(repository); service.Create("Keyboard", 199m, 5); foreach (Product product in service.GetAll()) { Console.WriteLine(product.Name); }

第三遍把示例放进 README,并确认代码围栏语言是 csharp

每日小测

做完本页后,用这 5 题检查是否真的掌握。

1. 判断题

本页的目标不是只把代码运行起来,还要能说清楚“为什么这样写”。

答案:对。能运行只是第一步,能解释原理、常用操作和常见错误,才说明本页内容进入了可复用能力。

2. 填空题

本页主题是:文档完善。今天至少要掌握的 3 个点是:

1. 写清项目入口文档 `README.md` 2. 写清用户操作文档 `USER_GUIDE.md` 3. 写清排错文档 `TROUBLESHOOTING.md`

答案:以上 3 点必须能用自己的代码跑通,不能只停留在阅读。

3. 流程题

遇到本页相关功能时,先按什么顺序处理?

答案:先看完整例子,确认最终效果;再读原理和名词;然后跟着第三部分从空项目敲代码;最后对照作业答案检查。

4. 找错误题

如果本页代码运行失败,第一步应该做什么?

答案:先看终端或 IDE 里的第一条错误,找到文件名和行号;不要同时改很多地方。再回到本页的“常见错误和修法”表格,对照错误类型逐项排查。

5. 改需求题

在本页完整例子跑通后,至少改一个小需求。

可选改法:

  • 改一个字段名称。
  • 多加一个校验条件。
  • 多输出一行结果。
  • 把固定数据改成用户输入。
  • 把一次处理改成多条数据处理。

答案标准:修改后能重新运行,并能说明这次修改影响了哪一段逻辑。重点检查:写清项目入口文档 README.md。

上位机专项练习

交付文档要让另一个人能安装、配置、启动、排错和恢复,而不是只记录代码结构。

下面 3 个例子都要亲手敲。先运行原代码,再完成每个例子后面的改动任务。

专项例子 1:安装说明

1. 解压 Hmi.App-win-x64.zip 2. 打开 appsettings.json 设置设备 IP 3. 双击 Hmi.App.exe 4. 首次启动确认日志目录已生成

运行结果或界面效果:

没有开发环境也能按步骤启动

改动任务: 找一个没看过项目的人试装。

专项例子 2:操作说明

开始采集: 首页 -> 开始采集 停止采集: 首页 -> 停止 -> 确认 确认报警: 报警页 -> 选择记录 -> 确认 导出报警: 报警页 -> 导出 CSV

运行结果或界面效果:

常用动作有明确路径

改动任务: 增加修改设备地址步骤。

专项例子 3:故障排查表

现象 | 检查 | 处理 设备离线 | 网线、IP、端口 | 修正后点击重连 无实时值 | 点位地址、采集状态 | 修正配置并重启采集 程序打不开 | crash.log | 将日志交给维护人员

运行结果或界面效果:

常见故障有检查顺序

改动任务: 增加配置文件损坏的处理。

第四部分:作业完整答案

作业要求

再补两个交付文档:

  • CHANGELOG.md:记录版本变化。
  • docs/KNOWN_ISSUES.md:记录已知问题和处理计划。

完整答案:CHANGELOG.md

在项目根目录创建 CHANGELOG.md

# 更新记录 ## 1.0.0 发布日期:待定 ### 新增 - 新增商品列表。 - 新增商品创建、编辑、删除功能。 - 新增商品搜索和筛选功能。 - 新增 JSON 本地保存。 - 新增 CSV 导入和导出。 - 新增操作日志。 - 新增角色权限判断。 - 新增发布检查清单。 ### 修复 - 修复商品名称为空时仍可保存的问题。 - 修复价格为 0 时提示不清楚的问题。 - 修复保存中重复点击导致重复提交的问题。 ### 文档 - 新增 README。 - 新增用户操作说明。 - 新增常见问题处理。 - 新增已知问题记录。

完整答案:docs/KNOWN_ISSUES.md

docs/KNOWN_ISSUES.md 写入:

# 已知问题 ## 1. CSV 导入失败时暂时只显示失败数量 ### 影响 用户能知道有多少行失败,但不能直接看到每一行失败的详细原因。 ### 临时处理 导入失败后,先检查 CSV 标题、价格列、库存列和空名称。 ### 后续计划 在导入结果中显示失败行号和失败原因。 ## 2. 当前数据保存在本地文件 ### 影响 多台电脑之间不会自动同步数据。 ### 临时处理 需要迁移数据时,手动复制 JSON 数据文件。 ### 后续计划 后续可以接入数据库或接口服务。 ## 3. 删除商品后暂时不能一键撤销 ### 影响 误删后需要重新新增商品。 ### 临时处理 删除前确认选中的商品是否正确。 ### 后续计划 后续增加删除确认和撤销功能。

正确结果

完成后,项目文档应该包含:

  • README.md
  • CHANGELOG.md
  • docs/USER_GUIDE.md
  • docs/TROUBLESHOOTING.md
  • docs/RELEASE_CHECKLIST.md
  • docs/KNOWN_ISSUES.md

这些文档加起来要回答 6 个问题:

  • 项目是什么。
  • 怎么运行。
  • 怎么使用。
  • 出错怎么处理。
  • 发布前怎么检查。
  • 还有哪些已知问题。