Quale livello in una webapp dovrebbe creare record di cronologia?

2

Ho un'applicazione web a 3 livelli con un livello di visualizzazione Web, un livello di logica aziendale e un livello di persistenza del database. Sto aggiungendo una funzione che popola una tabella cronologia con i record se e solo se l'elemento che si sta salvando è cambiato (confronta i record precedenti e quelli correnti e salva i record della cronologia se qualcosa è cambiato).

Non sono sicuro che la logica della creazione dei record della cronologia e del loro salvataggio appartenga al livello della logica aziendale o al livello di persistenza del database. Il livello di persistenza del database ha un unico metodo saveElement. Il livello della logica aziendale ha più posizioni che chiamano il metodo saveElement della persistenza del database.

Vantaggio di inserire la logica della cronologia nel livello di persistenza del database:

-Se la logica è stata inserita nel livello della business logic, c'è il rischio che alcuni dei chiamanti del livello della logica di business si dimentichino di chiamare il metodo per creare i record della cronologia. Se la logica è stata inserita nel livello di persistenza del database, è garantito che ogni record salvato abbia un record della cronologia creato.
-Il sito ha un altro sistema di cronologia per altre informazioni che si trovano nel livello del database e creerebbe consistenza se entrambi i sistemi si trovassero nello stesso posto.

Vantaggio di collocare la logica della cronologia nel livello della business logic:

-Ci è un po 'di complessità nella creazione dei record della cronologia e il livello del database è usato principalmente per chiamare / eseguire query SQL.

Quindi esistono motivi validi per posizionare questa logica nel livello della business logic o nel livello del database? O non importa dove si trova la logica?

    
posta David 02.01.2015 - 22:12
fonte

1 risposta

2

Dipende.

In particolare, dipende dal livello logico per cui vorresti ricordare le modifiche. Se "elemento modificato" è un record cronologico sensibile e hai già saveElement nel livello di persistenza, quindi estendere saveElement anche per registrare la modifica in un record storico / archivio ha senso.

Tuttavia, se stai cercando di archiviare eventi di livello aziendale come "spazio pubblicitario acquistato per il progetto 4017" ad un livello superiore rispetto agli elementi che stai memorizzando, dovrai farlo nel livello aziendale, perché è lì che l'intenzione dell'attività è compresa.

Questo è un classico problema di stratificazione: "dove sono disponibili le intenzioni ?" Spesso la semplice risposta (ad es. "Vogliamo salvare le informazioni sulla cronologia e abbiamo già un livello di persistenza, quindi è dove dovrebbe andare!") È, se non errata, resa drammaticamente meno chiara dai livelli superiori che scomposti le loro attività, e chiamando il livello di persistenza come più di un "salva questo!" cavallo di battaglia. I concetti di livello superiore spesso non sono disponibili dal momento in cui vengono filtrati ai livelli di persistenza. Al minimo, quindi, è necessario regolare l'API tra i livelli per consentire al livello aziendale di dichiarare il proprio intento (ad esempio "per il progetto X") poiché chiama saveElement .

    
risposta data 02.01.2015 - 22:50
fonte

Leggi altre domande sui tag