I DAO dovrebbero restituire istanze o solo i loro dati?

5

Supponiamo di avere un DAO che tocca il DB.

Il DAO dovrebbe restituire solo i dati e poi tocca a me eseguire l'istanziazione o il DAO suppone anche di eseguire l'istanziazione e restituirmi l'istanza - e perché dovrei scegliere un metodo piuttosto che un altro?

// Example with instantiation
studentDAO = {
  getById: function() {
    const data = db.query('SELECT FROM 'students'...');

    return new Student(data);
  }
}

// Example without instantiation (just returns the data)
studentDAO = {
  getById: function() {
    const data = db.query('SELECT FROM 'students'...');

    return data;
  }
}
    
posta Nik Kyriakides 13.07.2017 - 07:51
fonte

2 risposte

8

Dovresti restituire l'istanza, perché lo scopo del dao è quello di nascondere l'implementazione del database dal resto del codice e l'oggetto dati è specifico per il tuo db.

In effetti dovresti anche evitare di passare i dati in un costruttore come nel tuo esempio.

ad es.

studentDAO = 
{
    getById: function() 
    { 
        const data = db.query('SELECT FROM 'students'...');

        var s = new Student();
        s.Id = data[0]: 
        //that data can be accessed like this and that element 0 
        //contains the student Id is information specific to the 
        //database and the responsibility of the DAO class NOT the 
        //Student class

        return s;
    } 
}
    
risposta data 13.07.2017 - 08:36
fonte
1
  • Se per dati si intende un set di risultati o un cursore, NO, un DAO non dovrebbe restituirlo.
  • Se per dati si intende una stringa di valori separati da virgola, una stringa JSON o un oggetto business, è OK. Nei casi di report, una stringa di valori separati da virgole o TAB sembra un'opzione molto buona.
risposta data 13.07.2017 - 18:04
fonte

Leggi altre domande sui tag