Browse Source

Рефакторинг, преобразование классов в синглтоны

Book Pauk 5 years ago
parent
commit
c33e91d5d0
4 changed files with 32 additions and 14 deletions
  1. 4 3
      server/controllers/ReaderController.js
  2. 14 6
      server/core/ReaderStorage.js
  3. 13 4
      server/db/ConnManager.js
  4. 1 1
      server/index.js

+ 4 - 3
server/controllers/ReaderController.js

@@ -1,11 +1,12 @@
 const BaseController = require('./BaseController');
-const ReaderWorker = require('../core/ReaderWorker');
-const readerStorage = require('../core/readerStorage');
+const ReaderWorker = require('../core/ReaderWorker');//singleton
+const ReaderStorage = require('../core/ReaderStorage');//singleton
 const WorkerState = require('../core/WorkerState');//singleton
 
 class ReaderController extends BaseController {
     constructor(config) {
         super(config);
+        this.readerStorage = new ReaderStorage();
         this.readerWorker = new ReaderWorker(config);
         this.workerState = new WorkerState();
     }
@@ -39,7 +40,7 @@ class ReaderController extends BaseController {
             if (!request.items || Array.isArray(request.data)) 
                 throw new Error(`key 'items' is empty`);
 
-            return await readerStorage.doAction(request);
+            return await this.readerStorage.doAction(request);
         } catch (e) {
             error = e.message;
         }

+ 14 - 6
server/core/readerStorage.js → server/core/ReaderStorage.js

@@ -1,12 +1,22 @@
 const SQL = require('sql-template-strings');
 const _ = require('lodash');
 
-const connManager = require('../db/connManager');
+const ConnManager = require('../db/ConnManager');//singleton
 
+let instance = null;
+
+//singleton
 class ReaderStorage {
     constructor() {
-        this.storagePool = connManager.pool.readerStorage;
-        this.periodicCleanCache(3*3600*1000);//1 раз в 3 часа
+        if (!instance) {
+            this.connManager = new ConnManager();
+            this.storagePool = this.connManager.pool.readerStorage;
+            this.periodicCleanCache(3*3600*1000);//1 раз в 3 часа
+
+            instance = this;
+        }
+
+        return instance;
     }
 
     async doAction(act) {
@@ -113,6 +123,4 @@ class ReaderStorage {
     }
 }
 
-const readerStorage = new ReaderStorage();
-
-module.exports = readerStorage;
+module.exports = ReaderStorage;

+ 13 - 4
server/db/connManager.js → server/db/ConnManager.js

@@ -8,13 +8,23 @@ const migrations = {
     'readerStorage': require('./migrations/readerStorage'),
 };
 
+let instance = null;
+
+//singleton
 class ConnManager {
     constructor() {
-        this._pool = {};
+        if (!instance) {
+            this.inited = false;
+
+            instance = this;
+        }
+
+        return instance;
     }
 
     async init(config) {
         this.config = config;
+        this._pool = {};
 
         const force = null;//(config.branch == 'development' ? 'last' : null);
 
@@ -39,6 +49,7 @@ class ConnManager {
 
             this._pool[poolConfig.poolName] = connPool;
         }
+        this.inited = true;
     }
 
     get pool() {
@@ -46,6 +57,4 @@ class ConnManager {
     }
 }
 
-const connManager = new ConnManager();
-
-module.exports = connManager;
+module.exports = ConnManager;

+ 1 - 1
server/index.js

@@ -11,7 +11,7 @@ const path = require('path');
 const express = require('express');
 const compression = require('compression');
 
-const connManager = require('./db/connManager');
+const connManager = new(require('./db/ConnManager'))();//singleton
 
 async function init() {
     await fs.ensureDir(config.dataDir);