Un DAO può impostare l'ID e restituire l'istanza nelle operazioni Salva / Aggiorna?

3

Un metodo DAO save() imposta l'id / pk dell'istanza che deve essere salvata e restituisce il istanza o dovrebbe solo restituire il PK?

// Example A: Return the instance
studentDAO = {
  save: function(student) {
    const id = db.query('INSERT INTO 'students'...');
    student.setId(id);

    return student;
  }
}

// Example B: return the save id and it's up to me to set it 
// outside of the DAO
studentDAO = {
  save: function() {
    const id = db.query('INSERT INTO 'students'...');

    return id;
  }
}

E uso di quanto sopra:

// Example A
student = new Student();
student = studentDao.save(student);

// Example B
student = new Student();
idStudent = studentDao.save(student);
student.setId(idStudent);
    
posta Nik Kyriakides 13.07.2017 - 18:21
fonte

2 risposte

4

Questo bit è sbagliato:

    const id = db.query('INSERT INTO 'students'...');

studente.Id dovrebbe essere già impostato quando viene chiamata la funzione di salvataggio. Il db dovrebbe usare quell'ID fornito. Non ci dovrebbe essere un nuovo ID da restituire.

ad es.

public class Student
{
    public string Id {get;set;}
    public Student()
    {
        this.Id = Guid.NewGuid().ToString();
    }
}

A seconda della conoscenza di tutti gli studenti, essere in grado di creare un singolo nuovo studente aggiunge un punto di strozzatura a qualsiasi sistema e non causerà problemi.

    
risposta data 13.07.2017 - 19:13
fonte
0

Il database utilizzerà una chiave "naturale" o "artificiale". La chiave primaria è importante e dovrebbe essere restituita dall'inserto (DAO) se il database la sta generando.

Si dovrebbe sempre cercare le chiavi naturali, se possibile. In alcuni casi, questo non è possibile, ma la chiave (Id) appartiene all'oggetto e quindi dovrebbe essere restituita.

Se si sta utilizzando una chiave naturale, il salvataggio potrebbe ritornare come l'oggetto non è cambiato. Se si sta utilizzando una chiave artificiale, il salvataggio dovrebbe restituire il valore PK come parte dell'operazione di salvataggio.

    
risposta data 13.07.2017 - 19:49
fonte

Leggi altre domande sui tag