Sviluppo per MySQL e SQLite3 contemporaneamente

0

Sto sviluppando un programma desktop javascript (Node.js) che funziona con un database MySQL esistente. Vorrei (eventualmente) distribuire ad altri con SQLite, o MySQL se ne hanno bisogno (o forse qualche altro database).

Qual è una buona strategia per scrivere il codice agnostico del database? Sto cuocendo in switch come lo pseudo-codice qui sotto, ma penso che ci sia un modo migliore per risolvere questo problema:

result = query1();

function query1(){
  DbType = getDbType(); // Returns MySQL or SQLite
  if DbType == 'MySQL'{
    query = ""; // MySQL Query
    result = mysqlconnector.doquery(query);
  }else{
  if DbType == 'SQLite'{
    query = ""; // SQLite Query
    result = sqliteconnector.doquery(query);
  }
  return result;
}

Non penso di volere un ORM a tutto campo, dato che sembrano fastidiosamente restrittivi.

    
posta Trees4theForest 09.08.2017 - 20:53
fonte

1 risposta

1

Come suggerito da @Becuzz, in molte lingue OO dovresti creare un'interfaccia e implementare un'implementazione SQLite e MySQL. In JavaScript non hai interfacce, ma il principio è lo stesso.

Crea due oggetti JavaScript che hanno le stesse funzioni definite su ciascuno:

function mySqlDao(connector) {
  return {
    query1: function() {
      // query mysql
      return connector.doquery("...")
    }
  }
}

function sqliteDao(connector) {
  return {
    query1: function() {
      // query sqlite
      return connector.doquery("...")
    }
  }
}

Dove vuoi eseguire una query, inserisci un DAO

function foo(dao) {
  return {
    bar: function() {
      const foos = dao.query1()
      // ...
    }
  }
}

E alla tua composizione root costruisci il tuo DAO.

const dbType = getDbType()
const dao = dbType === 'MySQL' ? mySqlDao(mysqlconnector) :
  sqliteDao(sqliteconnector)
const myFoo = foo(dao) 
    
risposta data 09.08.2017 - 22:15
fonte

Leggi altre domande sui tag