Skip to content

数据存储

本页介绍数据存储模块的设计和实现。

存储方式

使用浏览器 LocalStorage 存储 JSON 数据。

优点:

  • 简单易用
  • 无需后端
  • 数据本地化

限制:

  • 容量限制(约 5-10MB)
  • 仅支持字符串

数据模型

Library(库)

typescript
interface Library {
  id: string
  name: string
  order: number
  collections: Collection[]
}

Collection(集)

typescript
interface Collection {
  id: string
  name: string
  order: number
  articles: Article[]
}

Article(文章)

typescript
interface Article {
  id: string
  title: string
  order: number
  sentences: Sentence[]
}

Sentence(句子)

typescript
interface Sentence {
  id: string
  text: string
  order: number
}

Definition(义项)

typescript
interface Definition {
  id: string
  character: string    // 字符
  content: string      // 义项内容
  createdAt: number
}
typescript
interface CharacterDefinitionLink {
  id: string
  definitionId: string
  sentenceId: string
  charPosition: number  // 字符在句子中的位置
}

ShortSentence(短句)

typescript
interface ShortSentence {
  id: string
  text: string
  sourceId: string     // 来源句子 ID
  startIndex: number
  endIndex: number
  createdAt: number
}

数据关系

Library 1:N Collection 1:N Article 1:N Sentence
                                          |
                                          | N:M

                                    Definition
                                          |
                                          | 1:N

                                   ShortSentence

核心 API

typescript
class StorageService {
  // 初始化
  initialize(): Promise<void>
  
  // 库操作
  addLibrary(name: string): Library
  getLibraries(): Library[]
  updateLibrary(id: string, data: Partial<Library>): void
  deleteLibrary(id: string): void
  
  // 义项操作
  addDefinition(character: string, content: string): Definition
  getDefinitions(): Definition[]
  getDefinitionsByCharacter(char: string): Definition[]
  
  // 关联操作
  addLink(defId: string, sentId: string, pos: number): void
  getLinksByDefinition(defId: string): CharacterDefinitionLink[]
  
  // 导入导出
  exportData(): string
  importData(json: string): void
  
  // 清空
  clear(): void
}

使用示例

typescript
import { storage } from '@/services/storage'

// 添加库
const library = storage.addLibrary('高中文言文')

// 添加义项
const definition = storage.addDefinition('之', '代词,指代前文')

// 关联句子
storage.addLink(definition.id, sentence.id, 3)

// 导出数据
const json = storage.exportData()

基于 MIT 许可发布