Come aiutare a tenere traccia degli identificatori utilizzati sia nell'applicazione che nel database?

4

Ad esempio:

  1. Ho un ACL (access control list) con le chiavi nel database come create_user e allow_booking_for_past_dates . Ogni voce ACL ha un nome metodo o funzione corrispondente nell'applicazione.
  2. Ho diverse classi di 'controller' per un'applicazione web ognuna delle quali può avere uno o più riferimenti in una tabella 'pagine' nel database.

In entrambi i casi ogni volta che viene apportata una modifica all'applicazione, qualcuno deve ricordare di aggiornare il database e viceversa. L'aggiornamento dell'applicazione dopo una mod del database può essere relativamente privo di problemi denominando le chiavi in modo tale che possano essere facilmente individuate da search-replace. Trovare le istanze di un identificatore nel database può essere similmente indolore.

Tutto il resto di solito è contenuto completamente nell'applicazione (sottoclasse, file di configurazione, ecc.) o interamente nel database (chiavi primarie, chiavi esterne, indici, ecc.)

Come tenere traccia di questi identificatori che collegano i due domini?

Al momento disponiamo di un documento Word (di tutte le cose) con una tabella che descrive in modo preciso il nome della chiave, dove trovarlo e una descrizione di cosa sia. Questo sembra funzionare meglio del "commit to the application, crea la voce nel db e incrocia le dita per il futuro" approccio.

    
posta boatingcow 29.10.2013 - 18:01
fonte

1 risposta

1

Hai a che fare con il dolore di violare un principio di design:

Prendi le decisioni in un unico posto.

Se la lista di controllo di accesso ei metodi nell'applicazione duplicano la stessa conoscenza, le modifiche a tale conoscenza non possono essere controllate in un unico posto.

La tua soluzione attuale è creare un terzo posto per controllare quella conoscenza. Questa è una follia.

Potresti pensare che il lavoro del documento di parole sia l'autorità. Tutto il resto deve conformarsi ad esso. Bah! Non è possibile compilare e testare un documento word. Il più che hai fatto qui è creare un resoconto non aggiornato sullo stato del codice.

Potrei entrare in una misura di interruzione dello stop in cui generi codice dall'ACL rendendolo l'autorità ma anche questo è pazzesco.

In realtà quello che devi fare è capire che l'ACL non è un comportamento. Sono dati. Dovresti passare le voci nell'elenco ai metodi che eseguono ciò che le voci devono fare.

Fai questo e puoi smettere di scherzare con il tuo codice ogni volta che è necessario aggiungere una nuova voce.

In alternativa, se ritieni che sia necessario disporre di metodi artigianali per ogni voce, almeno la creazione manuale delle chiavi nel database. Verifica che la chiave esista prima di usarla, se non la crei. Se questo diventa un problema di prestazioni, basta memorizzare nella cache la conoscenza che la chiave esca nel DB.

Preferisco l'approccio ALC-is-data. È più semplice Ma soprattutto queste ultime due idee rendono il posto dove decidere quale dovrebbe essere l'ACL.

    
risposta data 19.11.2016 - 05:48
fonte

Leggi altre domande sui tag