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:
VolevoriutilizzareilmiocodiceequindivieneutilizzatoEditDialog
percrearePerson
oaggiornarlo.Quindiquestafinestradidialogoèinizializzatadaun'istanzaPerson
disponibile(Modifica-Operazione)odaunanuova(Creazione-Operazione).
Poichéhoappresochec'èsempreunutentemalvagio,volevoevitareilseguentescenario:
- Faiclicsulpulsante"Crea persona"
- Nuova
Person
viene creata nel Database -
EditDialog
per il nuovoPerson
viene visualizzato
- Nuova
- Fai clic sul pulsante "Chancel"
-
Person
deve essere rimosso (= contrassegnato come non attivo) daDatabase
-
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":
- Nuova
Person
deve essere creata inDatabase
-
Person
deve essere aggiornato inDatabase
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 dicreate(Person)
? - crea un
Person
se non è ancora disponibile al richiamo diupdate(Person)
?
O c'è un'altra soluzione / pratica a cui non ho pensato?