我有一个与多个数据库交互的节点应用程序。我创建了一个类,然后我开始创建不同的数据库(它们主要具有相同的CRUD模式。
类别:
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()
我注意到在此设置中,Users数据库正在多次初始化。我认为我需要解决的是Singleton。我理解我是单身人士,但在这种情况下使用一个是很困难。
非常感谢任何帮助或指导。
答案 0 :(得分:1)
看起来你不一定需要单例,你可以使用地图(也可能只是一个对象)将数据库实例存储在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> {}
}
的静态字段中:
<input type="button" value="1" onclick="display()">
function display(e){
e = e || window.event;
e = e.target || e.srcElement
screen.value += e.value; //e.value contains the value of the button
}
当然,您可以将此数据库实例管理分解为另一个类。