readful/learning_docs/02_数据模型设计思路.md
ddshi 25b7c5ae35 feat: 实现核心数据模型设计和Flutter学习文档
主要功能:
-  完成Book模型(电子书基本信息管理)
-  完成Highlight模型(文本高亮功能)
-  建立Flutter数据模型设计标准

技术特点:
- 采用不可变对象设计模式
- 实现完整的序列化支持(toMap/fromMap)
- 提供便利的工厂构造函数
- 正确处理枚举类型序列化
- 完善的空值安全处理

学习文档:
- 📚 项目结构与环境配置指南
- 🎯 数据模型设计思路分析
- 💡 Flutter数据模型最佳实践

下一步:
- 实现Annotation批注模型
- 设计本地存储方案
- 开始UI组件开发

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-17 20:16:51 +08:00

76 lines
2.4 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Flutter 数据模型设计学习笔记
## 一、数据模型设计的重要性
在Flutter应用开发中数据模型是整个应用的"地基"
- **决定UI结构**:数据结构直接影响界面显示方式
- **影响状态管理**:数据复杂度决定了状态管理方案的选型
- **指导存储设计**:数据结构决定了如何进行本地存储和网络传输
## 二、Flutter数据模型设计原则
### 1. 不可变性原则Immutability
**为什么需要不可变性?**
- Flutter的Widget重建机制基于状态比较
- 不可变对象更容易进行状态比较和更新检测
- 避免"意外修改"导致的bug
**实现方式:**
- 所有字段使用`final`修饰
- 提供`copyWith()`方法创建新对象
- 不要提供修改字段的方法
### 2. 序列化支持
**为什么需要序列化?**
- 本地存储需要将对象转换为可存储格式
- 网络传输需要JSON格式
- 状态管理工具需要状态保存功能
**必需方法:**
- `toMap()` - 将对象转换为Map
- `fromMap()` - 从Map创建对象
### 3. 空值安全
**实践原则:**
- 引用类型字段要有默认空值如空列表、空Map
- 使用`?`表示可为null的字段
- 构造函数中使用required标记必需字段
## 三、电子书阅读器核心实体分析
### 核心需求分析:
1. **支持导入epub、mobi、txt文件** → 需要Book模型
2. **划线(不同颜色)** → 需要Highlight模型
3. **批注** → 需要Annotation模型
4. **书签** → 需要Bookmark模型
5. **书架管理** → 需要Bookshelf模型
6. **阅读进度** → 需要ReadingProgress模型
### 实体关系:
- 一个书架包含多本书
- 一本书属于多个书架
- 一本书有多个章节、批注、高亮、书签
- 一本书有一个阅读进度
## 四、学习步骤
### 第一步创建Book模型最核心的实体
包含字段:
- 基本信息id, title, author, publisher
- 文件信息filePath, format, fileSize
- 阅读信息status, addedDate, totalPages
- 扩展信息tags, rating, description
### 第二步:创建书架相关模型
- Bookshelf书架信息
- BookshelfBook书架与书籍的关联
### 第三步:创建阅读相关模型
- ReadingProgress阅读进度
- Annotation批注
- Highlight高亮
- Bookmark书签
### 第四步:学习本地存储方案
- 选择Hive数据库
- 实现Repository模式
- 配置数据持久化