为不同的 Pouchdb 实例创建打字稿单例
Creating typescript singleton for different Pouchdb instances
我有一个与多个数据库交互的节点应用程序。我创建了一个 class,然后我开始创建不同的数据库(它们在很大程度上具有相同的 CRUD 模式。
Class:
class CRUDService {
private section: string;
private pouch: any;
constructor(section: string) {
this.section = section;
this.pouch = new PouchDB('.' + section, pouchOptions);
}
public create(data: any): Promise<string> {}
public retrieve(id: string): Promise<string> {}
public update(id: any, data: any): Promise<string> {}
public delete(item: any): Promise<string> {}
public all(): Promise<string> {}
export {CRUDService};
数据库启动:
function Users() {
return new CRUDService('users');
}
export {Users};
然后我像这样在整个应用程序中使用它:
import {Users} from 'databases';
const userService = Users();
userService.something()
我注意到在此设置中,用户数据库被初始化了多次。我认为我需要解决的是单身人士。我明白我是单身人士,但在这种情况下我无法使用单身人士。
任何帮助或指导将不胜感激。
看起来你不一定需要单例,你可以简单地将数据库实例存储在 CRUD Service
中的静态字段中,使用映射(也可以只是一个对象):
class CRUDService {
private static pouchDb: Map<string, PouchDB> = new Map<string, PouchDB>();
private section: string;
private pouch: any;
constructor(section: string) {
this.section = section;
if (!CRUDService.pouchDb.has(this.section)) {
CRUDService.pouchDb.set(section, new PouchDB('.' + section, pouchOptions));
}
this.pouch = CRUDService.pouchDb.get(this.section);
}
public create(data: any): Promise<string> {}
public retrieve(id: string): Promise<string> {}
public update(id: any, data: any): Promise<string> {}
public delete(item: any): Promise<string> {}
public all(): Promise<string> {}
}
当然,您可以将此数据库实例管理分解为另一个 class。
我有一个与多个数据库交互的节点应用程序。我创建了一个 class,然后我开始创建不同的数据库(它们在很大程度上具有相同的 CRUD 模式。
Class:
class CRUDService {
private section: string;
private pouch: any;
constructor(section: string) {
this.section = section;
this.pouch = new PouchDB('.' + section, pouchOptions);
}
public create(data: any): Promise<string> {}
public retrieve(id: string): Promise<string> {}
public update(id: any, data: any): Promise<string> {}
public delete(item: any): Promise<string> {}
public all(): Promise<string> {}
export {CRUDService};
数据库启动:
function Users() {
return new CRUDService('users');
}
export {Users};
然后我像这样在整个应用程序中使用它:
import {Users} from 'databases';
const userService = Users();
userService.something()
我注意到在此设置中,用户数据库被初始化了多次。我认为我需要解决的是单身人士。我明白我是单身人士,但在这种情况下我无法使用单身人士。
任何帮助或指导将不胜感激。
看起来你不一定需要单例,你可以简单地将数据库实例存储在 CRUD Service
中的静态字段中,使用映射(也可以只是一个对象):
class CRUDService {
private static pouchDb: Map<string, PouchDB> = new Map<string, PouchDB>();
private section: string;
private pouch: any;
constructor(section: string) {
this.section = section;
if (!CRUDService.pouchDb.has(this.section)) {
CRUDService.pouchDb.set(section, new PouchDB('.' + section, pouchOptions));
}
this.pouch = CRUDService.pouchDb.get(this.section);
}
public create(data: any): Promise<string> {}
public retrieve(id: string): Promise<string> {}
public update(id: any, data: any): Promise<string> {}
public delete(item: any): Promise<string> {}
public all(): Promise<string> {}
}
当然,您可以将此数据库实例管理分解为另一个 class。