Sto appena iniziando un progetto per sviluppare una nuova applicazione web abbastanza consistente con un database MSSQL sottostante. Stiamo assumendo un team di sviluppatori per scrivere l'applicazione (in .NET) e sto costruendo il database (ho già iniziato).
Il mio piano iniziale era scrivere Stored Procedures nel mio database per gestire tutta la logica aziendale, recuperare e aggiornare i dati e così via, e fare in modo che gli sviluppatori effettuino solo chiamate, passando i parametri appropriati. Quindi, poiché è molto probabile che desideriamo creare app mobili che replicano alcune parti delle funzionalità dell'app Web, ho pensato di creare uno strato intermedio di servizi Web per interagire con il database e servire le applicazioni, ma ero continueremo ad avere questo Stored procedure di livello intermedio.
Ho passato la maggior parte degli ultimi giorni a leggere su ORM e a leggere gli argomenti a favore e contro di usarli al posto di SProc o anche di SProc, o non del tutto. È un campo minato, e sono davvero alla ricerca di una guida chiara su come dovrei strutturare questo progetto. So che c'è il potenziale per la discussione qui, ma spero di evitarlo ponendo alcune domande chiare:
- A quanto ho capito, un ORM genererà automaticamente in modo automatico SQL per eseguire le attività richieste dallo sviluppatore, ad es. creare un nuovo record, cancellare un record, ecc. Posso vedere come funziona per la manipolazione dei dati di base, ma cosa succede se le cose sono un po 'più complesse? Cosa succede se, ad esempio, in realtà non voglio cancellare alcun record dal database ma, piuttosto, voglio solo che un record venga contrassegnato come 'cancellato' quando un utente lo elimina in modo che sia nascosto nell'applicazione ma ancora presente sul tavolo? Presumibilmente, un ORM genererebbe semplicemente il codice per cancellare semplicemente il record e rimuoverlo effettivamente, e le chiamate per recuperare i record da quella tabella includeranno i record contrassegnati come "cancellati" a meno che lo sviluppatore conoscesse la struttura dei dati sottostante abbastanza bene da sapere per escluderli. Al contrario, posso semplicemente scrivere un SProc chiamato 'DeleteRecord', che contrassegna il record specificato come 'cancellato' e un altro chiamato 'GetRecord' che restituisce solo i record non contrassegnati come 'cancellati', e quando lo sviluppatore li usa non lo fanno bisogno di sapere cosa sta realmente accadendo nel database. E questo è solo un semplice esempio: alcuni dei miei SProc stavano per fare diverse cose in risposta a una richiesta apparentemente semplice (ad esempio scrivere su una tabella Audit quando un record viene modificato). Come potrebbe un ORM gestire questo genere di cose?
- L'unica ragione per cui creo uno strato intermedio tra l'applicazione e il database è che le app future, in particolare le app mobili, possano accedere ai dati utilizzando lo stesso metodo. La mia idea era di creare servizi Web che recuperassero i dati dagli SProc e li restituissero in XML o JSON, oltre a fornire servizi per la creazione, l'aggiornamento e l'eliminazione. Questo sembra ragionevole?
- Leggendo online sullo sviluppo di applicazioni su più livelli, le raccomandazioni variano da due a circa otto diversi livelli! Sono solo ingenuo quando mi chiedo se sia possibile finire in un "buco nero di livello" in tutto questo? La nostra applicazione verrà utilizzata da centinaia, non da migliaia e conterrà centinaia di migliaia (forse alla fine milioni) di record nelle sue tabelle chiave, non miliardi. Riesco a vedere i benefici di un grado di astrazione, ma preferisco mantenere le cose il più semplici possibile allo stesso tempo!
- Se arrivano i nostri sviluppatori assoldati e dico loro che stanno accedendo al database usando solo chiamate SProc e non un ORM, è probabile che si sentano a loro agio con questo? È probabile che mi guardino come se fossi dei tempi bui? Sarebbero giustificati nel pensare che stessimo andando in questo modo sbagliato?
Probabilmente ci sono molte più domande, sto solo avendo difficoltà ad articolare l'assoluta confusione e la sensazione di depressione lievemente deprimente che deriva dall'aver pensato che tutto ciò avesse funzionato e ora mi chiedevo se sono in qualche modo sopra la mia testa. / p>