TL; DR
Memorizzazione di regole aziendali in continua evoluzione in modo che un'app possa comportarsi come nel momento X in passato. Può essere fatto? Se sì, come?
Versione lunga
In questo momento, questo è più un esercizio di pensiero che un bisogno reale, anche se le cose potrebbero cambiare in un futuro non troppo lontano.
La società per cui lavoro è nel settore delle buste paga. Abbiamo un'applicazione desktop il cui compito è principalmente quello di calcolare l'ammontare dello stipendio che un dipendente riceverà. In Italia questo è un lavoro in sé e per sé, perché le cose cambiano letteralmente ogni mese, con nuove tasse, fusioni di vecchie, diversi calcoli che devono essere fatti. In breve, è un pasticcio terribile e terribile.
Non fa alcuna differenza, ma questa è un'app COBOL (non chiedere) ed è abbastanza grande, con un clock stimato di 5M LOC. Inoltre, affermando che invece di essere progettato male non ha alcun disegno di base, sarebbe un modo delicato.
Per chissà quale motivo, i clienti devono essere in grado di ricalcolare i libri paga passati. Certo, hanno bisogno che il programma si comporti come ha fatto in quel preciso mese.
Un po 'da parte: personalmente, questo non ha senso per me, perché una volta pagato il ragazzo, l'unica cosa che potresti essere in grado di fare è aggiustare le cose il prossimo mese, e mantenere i dati risultanti (che non è solo il salario, ma migliaia di altre informazioni) in un archivio per le domande successive sarebbe il più banale degli esercizi. Quindi, ancora una volta, non ho nulla a che fare con la manutenzione quotidiana di questa app, quindi le precise ragioni dietro questi requisiti potrebbero semplicemente sfuggirmi a causa di ciò. Potrei essere coinvolto, almeno in parte, nella progettazione di una profonda revisione dell'intera faccenda, però, ed è per questo che sto scrivendo questa domanda. Quindi, supponiamo che questo sia un requisito reale.
Quindi, ciò che questa app fa ogni mese è che copia tutte le sotto-app di cui è composto in una nuova cartella, insieme a una copia completa dei suoi dati. Una copia di quasi tutto, che finisce per mangiare un'enorme quantità di spazio sulle macchine dei clienti.
Non usa un database, è ancora bloccato con i file indicizzati (di nuovo, non chiedere).
Ora la domanda: come progetteresti se potessi ricominciare da capo? Sia che si trasformi in un'applicazione web o che si crei un'altra app per desktop, sono più interessato al lato concettuale .
Come progettereste un'app che deve mantenere aggiornate le regole di business e e riapplicare quelle vecchie su richiesta?
Ora può essere fatto facilmente perché in realtà copiano l'intera shebang una volta al mese e ogni pezzo di dati viene memorizzato in file indicizzati.
Con un'app progettata correttamente, però, non saprei come affrontarla in modo elegante: gli schemi di database tendono a cambiare, ad esempio, e fare una copia dell'intera cosa ogni mese sarebbe solo un incubo.
Ma il nocciolo della questione è la versione delle regole aziendali: può anche essere fatto? Una cosa che farei sicuramente sarebbe naturalmente tirarli fuori dal codice reale e in una serie di script, perché ora, come nella migliore tradizione COBOL, tutto è cablato nel codice, quindi ricompilano e spediscono anche se è stato modificato un semplice calcolo.
Dove andare da lì, però, è un po 'un mistero.