docs/architecture/storage-refactoring-summary.md
基于用户反馈,我们对存储架构进行了两项重要改进:
TemplateManager的config?.storageKey是过度设计的产物:
// ❌ 修改前
export interface TemplateManagerConfig {
storageKey?: string; // localStorage存储键名
cacheTimeout?: number; // 缓存超时时间
}
// ✅ 修改后
export interface TemplateManagerConfig {
cacheTimeout?: number; // 缓存超时时间
}
// ❌ 修改前
this.config = {
storageKey: config?.storageKey || CORE_SERVICE_KEYS.USER_TEMPLATES,
cacheTimeout: config?.cacheTimeout || 5 * 60 * 1000,
};
// ✅ 修改后
this.config = {
cacheTimeout: config?.cacheTimeout || 5 * 60 * 1000,
};
// 直接使用常量
await this.storageProvider.setItem(CORE_SERVICE_KEYS.USER_TEMPLATES, data);
内置模板语言设置与其他UI设置使用不同的存储方式:
pref:前缀)用户的观点是正确的:
// ❌ 修改前
export class TemplateLanguageService {
private readonly STORAGE_KEY = 'app:settings:ui:builtin-template-language';
private storage: IStorageProvider;
constructor(storage: IStorageProvider) {
this.storage = storage;
}
async setLanguage(language: BuiltinTemplateLanguage): Promise<void> {
await this.storage.setItem(this.STORAGE_KEY, language);
}
}
// ✅ 修改后
export class TemplateLanguageService {
private storage: IStorageProvider;
private preferenceService: IPreferenceService;
constructor(storage: IStorageProvider, preferenceService: IPreferenceService) {
this.storage = storage;
this.preferenceService = preferenceService;
}
async setLanguage(language: BuiltinTemplateLanguage): Promise<void> {
await this.preferenceService.set(UI_SETTINGS_KEYS.BUILTIN_TEMPLATE_LANGUAGE, language);
}
}
// ❌ 修改前
export function createTemplateLanguageService(storageProvider: IStorageProvider): TemplateLanguageService {
return new TemplateLanguageService(storageProvider);
}
// ✅ 修改后
export function createTemplateLanguageService(
storageProvider: IStorageProvider,
preferenceService: IPreferenceService
): TemplateLanguageService {
return new TemplateLanguageService(storageProvider, preferenceService);
}
// ❌ 修改前
const PREFERENCE_BASED_KEYS = [
'app:settings:ui:theme-id',
'app:settings:ui:preferred-language',
// ...
] as const;
const DIRECT_STORAGE_KEYS = [
'app:settings:ui:builtin-template-language', // 特殊处理
] as const;
// ✅ 修改后
const PREFERENCE_BASED_KEYS = [
'app:settings:ui:theme-id',
'app:settings:ui:preferred-language',
'app:settings:ui:builtin-template-language', // 统一处理
// ...
] as const;
const DIRECT_STORAGE_KEYS = [
// 现在所有UI设置都通过PreferenceService存储
] as const;
核心服务
packages/core/src/services/template/types.ts - 简化配置接口packages/core/src/services/template/manager.ts - 移除storageKey配置packages/core/src/services/template/languageService.ts - 使用PreferenceServicepackages/core/src/services/data/manager.ts - 简化存储键分类应用初始化
packages/ui/src/composables/useAppInitializer.ts - 更新服务创建packages/desktop/main.js - 更新服务创建测试文件
packages/core/tests/unit/template/languageService.test.ts - 更新测试packages/core/tests/unit/template/manager.test.ts - 更新测试文档
docs/architecture/storage-key-architecture.md - 更新架构说明// 1. 在常量文件中定义键名
export const UI_SETTINGS_KEYS = {
NEW_PREFERENCE: 'app:settings:ui:new-preference',
} as const;
// 2. 通过PreferenceService存储
await preferenceService.set(UI_SETTINGS_KEYS.NEW_PREFERENCE, value);
// 3. 在DataManager中添加到PREFERENCE_BASED_KEYS
const PREFERENCE_BASED_KEYS = [
// ...existing keys
'app:settings:ui:new-preference',
] as const;
这次重构体现了"简单即美"的设计哲学:
重构后的架构更加简洁、一致和可维护,为未来的功能扩展奠定了良好的基础。