/** * 数据访问对象工厂 * 创建不同类型存储的数据访问对象实现 */ import { StorageConfig } from '../interfaces/StorageAdapter'; import { DomainDAO } from '../interfaces/DomainDAO'; import { DomainDAOImpl } from './DomainDAOImpl'; import { StorageFactory, StorageType } from '../adapters/StorageFactory'; import { StorageRegistry } from '../adapters/StorageRegistry'; /** * 域名数据访问对象工厂类 * 支持新的存储适配器接口 */ export class DomainDAOFacory { /** * 创建域名数据访问对象 * @param type 存储类型 * @returns 域名数据访问对象实例 */ public static createDomainDAO(type: StorageType | string): DomainDAO { // 创建相应类型的存储适配器 const adapter = StorageFactory.createAdapter(type); // 使用通用的DomainDAOImpl实现,通过适配器与不同存储交互 return new DomainDAOImpl(adapter); } /** * 根据配置创建域名数据访问对象并初始化 * @param config 存储配置 * @param configKey 配置标识键(可选) * @returns Promise 初始化后的域名数据访问对象实例 */ public static async createInitializedDomainDAO( config: StorageConfig, configKey: string = 'domain' ): Promise { // 注册适配器到存储注册表 const registry = StorageRegistry.getInstance(); const adapter = await registry.registerAdapter(configKey, config); // 创建DAO实例 const dao = new DomainDAOImpl(adapter); await dao.initialize(); return dao; } /** * 从存储注册表获取域名数据访问对象 * @param adapterKey 适配器标识键(默认为'default') * @returns 域名数据访问对象实例 */ public static getDomainDAOFromRegistry(adapterKey: string = 'default'): DomainDAO { const registry = StorageRegistry.getInstance(); const adapter = registry.getAdapter(adapterKey); return new DomainDAOImpl(adapter); } }