Ho appena iniziato un nuovo lavoro come sviluppatore di database per un'azienda di dimensioni medio-piccole, basata sulla tecnologia Microsoft. Ho notato presto quante pratiche si discostano da ciò che mi è stato insegnato a scuola per quanto riguarda le migliori pratiche, i modelli di progettazione, i test e la gestione dei progetti.
Ciò che mi infastidisce di più è il modo in cui il nostro principale sviluppatore di database (d'ora in poi chiamato "John") mantiene lo schema del modello nel database! Lo facciamo avendo 3 tavoli "magici"; uno per gli schemi di database, uno per le tabelle e uno per le colonne.
L'inserimento di un record nella tabella " Tabelle " genera (tramite un trigger di database) la tabella corrispondente effettiva. Inserendo una riga nella tabella " Righe " si aggiorna la tabella referenziata con quella riga. Questi vengono a loro volta letti dal suo programma C # fatto in casa per generare modelli C #, che vengono utilizzati dagli sviluppatori frontend per i controller e verso l'esterno.
A parte questo, la maggior parte dello sviluppo avviene secondo il framework MVC ASP.NET .
Vedo un paio di difetti con questo approccio:
- Abbiamo bisogno che mantenga l'ORM, e raramente ha il tempo di farlo (la sicurezza del lavoro è buona!)
- I trigger per le tabelle "Tabelle" e "Righe" sono imperfetti. Non supportano gli aggiornamenti delle tabelle, né i vincoli Check o le funzionalità più "avanzate". Sebbene potremmo sicuramente migliorarli, non sono ancora sicuro che questa sia la strada da percorrere.
- Mantenere la logica programmatica nel database sembra strano e restrittivo (anche se è possibile estendere i suoi modelli tramite C #).
- Il suo generatore di modelli C # deve essere gestito manualmente da una delle 3 persone (tra le quali io sono uno) e non è ancora abbastanza maturo per essere incluso in un processo di compilazione automatizzato.
Diverse persone hanno suggerito di introdurre gradualmente un prodotto vero e testato come Entity Framework , ma lui lo rifiuta, affermando che mantenere la logica di business nel livello di codice è adatto solo per applicazioni su piccola scala e progetti bootstrap per le startup.
Questo post sta conducendo verso qualcosa che potrebbe sembrare una discussione supponente, ma questa non è la mia intenzione. Voglio solo qualche chiarimento riguardo al nostro approccio architettonico.
Mantenere i modelli di dominio nel database può essere una soluzione sostenibile per un'azienda in crescita?