数据存储
本页介绍数据存储模块的设计和实现。
存储方式
使用浏览器 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
}CharacterDefinitionLink(关联)
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()