Filtraggio di oggetti cancellati

0

Immagina una semplice app di messaggistica scritta in Django. Gli utenti hanno la possibilità di cancellare i messaggi in qualsiasi momento, ma i messaggi devono essere conservati nel database. Ci sono due opzioni:

  • Un attributo deleted su Message . Quindi la chiamata user.messages.all() verrebbe sostituita con user.messages.filter(deleted=False) ovunque nel codice. Sembra che potrebbe creare bug nascosti e non è intuitivo.

  • Crea un oggetto DeletedMessage separato. Ciò viola il principio di avere dati simili in un'unica posizione, ma consente chiamate di metodo più semplici (ad esempio user.messages.all() ).

Quale metodo è migliore?

    
posta Jared Nielsen 02.03.2017 - 17:40
fonte

2 risposte

1

Hai inavvertitamente evidenziato un odore di codice.

use.messages.filter(deleted=false) dovrebbe apparire solo una volta nella tua applicazione.

Hai detto che tutte le chiamate a user.messages.all() dovrebbero essere cambiate, ma non è vero. Invece di avere più chiamate alla funzione "GetAll", dovresti racchiuderla in un'astrazione riusabile come un repository o un servizio.

Se non lo fai, stai effettivamente duplicando la logica e rendendo difficile la manutenzione.

    
risposta data 02.03.2017 - 18:50
fonte
0
  1. Crea una nuova colonna nella tabella dei messaggi, Deleted (bit).

  2. Crea una vista aggiornabile sulla tabella dei messaggi che esclude i messaggi eliminati.

  3. Crea l'accesso ai dati per i messaggi intorno alla vista.

risposta data 02.03.2017 - 19:11
fonte