Crea o aggiorna automaticamente l'oggetto nel database

0

Ho una classe di database con la seguente interfaccia:

public Database {
    //returns false if p (its ID) is already available
    //otherwise adds p the the list and returns true
    public boolean create(Person p);

    //returns false if p (its ID) was not found in the list
    //replaces the available Person q (q.ID == p.ID) with p and returns true
    public boolean update(Person p);

    //returns false if p (its ID) was not found in the list
    //marks the available Person q (q.ID == p.ID) as inactive returns true
    public boolean remove(Person p);
}

Il Person è immutabile e può essere identificato da un ID univoco. Ho un EditDialog che assomiglia a questo:

VolevoriutilizzareilmiocodiceequindivieneutilizzatoEditDialogpercrearePersonoaggiornarlo.Quindiquestafinestradidialogoèinizializzatadaun'istanzaPersondisponibile(Modifica-Operazione)odaunanuova(Creazione-Operazione).

Poichéhoappresochec'èsempreunutentemalvagio,volevoevitareilseguentescenario:

  • Faiclicsulpulsante"Crea persona"
    • Nuova Person viene creata nel Database
    • EditDialog per il nuovo Person viene visualizzato
  • Fai clic sul pulsante "Chancel"
    • Person deve essere rimosso (= contrassegnato come non attivo) da Database
    • EditDialog è eliminato
  • ripetizione

Il che porterebbe a molti% inattivi diPerson s in Database . Così ho deciso di creare solo Person in Database , se l'utente fa clic sul pulsante "Salva". Il che porta a due possibili scenari per il Listener del pulsante "Salva":

  1. Nuova Person deve essere creata in Database
  2. Person deve essere aggiornato in Database

Quindi il codice del listener è simile al seguente:

if(!database.create(p) {
    database.update(p);
}

Che non è molto carino secondo me. Il lungo e il corto di esso è, dovrebbe il database automaticamente

  • aggiorna un Person se è disponibile al richiamo di create(Person) ?
  • crea un Person se non è ancora disponibile al richiamo di update(Person) ?

O c'è un'altra soluzione / pratica a cui non ho pensato?

    
posta Thomas 06.07.2014 - 14:44
fonte

1 risposta

1

L'interfaccia utente dovrebbe dire al livello del database quale operazione eseguire. Nell'interfaccia utente, avrai ovviamente due pulsanti, uno che dice "Crea nuova persona" e l'altro che dice "Modifica questa persona". Quindi sai già quale azione deve essere eseguita.

Quando invochi la finestra di dialogo dell'interfaccia utente, passa questo stato (Aggiungi o Modifica) alla finestra di dialogo. Quindi, in base al valore di questa variabile, la finestra di dialogo può chiamare Database.create() o Database.update() quando fai clic su Save .

    
risposta data 06.07.2014 - 23:13
fonte

Leggi altre domande sui tag