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

2.4 KiB
Raw Blame History

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模式
  • 配置数据持久化