Sto cercando di saperne di più sull'ortodossia corrente rispetto alla progettazione di applicazioni ASP.NET MVC e mi sono imbattuto in qualcosa che mi confonde, relativo alla scelta tra la strategia di progettazione del database (prima il codice, il modello prima ... ). Questa è l'affermazione dell'autore (parafrasi un po '):
The code first approach does not allow you to apply inheritance. The code first approach permits you to define the model from the code, but will not create classes. The code first approach uses the POCOs (Plain old CLR objects) model to create classes. If your application must be able to apply inheritance and/or create classes, don't use code first.
The database first approach supports the ability to incorporate inheritance hierarchies and the creation of classes. Similarly, with the model first approach you will produce Entities, relationships, and inheritance hierarchies right on the design surface of framework.
Subito, questa linea di discussione mi sembra strana. La mia sensazione è che l'impedenza relazionale dell'oggetto sarà un problema a prescindere dal codice prima / modello prima. Non riesco a vedere come selezionare, per esempio, il modello offre prima di tutto un vantaggio nell'affrontare l'impedenza O-R. Esiste davvero un modo per creare relazioni di ereditarietà in tale editor grafico EDMX fornito da Microsoft con Visual Studio? Non pensavo che ci fosse, ma, ancora una volta, non ho assolutamente alcun desiderio di confondere il mio lavoro in quel designer (che, per me, assomiglia a un diagramma di Entità-Relazione, non una sorta di OOD diagramma).
Allo stesso modo, trovo l'affermazione che "[il] primo approccio al database supporta la capacità di incorporare le gerarchie di ereditarietà e la creazione di classi" perplessi. Questo approccio implica presumibilmente la costruzione del database in SQL Server Management Studio e non sono a conoscenza di funzionalità di tipo OOD in quello strumento. (Ancora una volta, devo ammettere che non ho mai voluto trovarli se esistono ...)
Quindi, mi rimane la convinzione generale che qualunque sia l'approccio scelto, lo sviluppatore finirà per dover creare manualmente alcune serie di classi wrapper che esibiscono una gerarchia di ereditarietà (supponendo che ne voglia una), e in genere trattare con O impedenza. Qual è il vero svantaggio del codice prima qui?
Dopo aver digitato tutto questo, mi è venuto in mente che tutto quel testo sopra citato potrebbe dire che i POCO devono usare tipi semplici ( int , bool , e simili). È davvero quello che viene indicato qui? In tal caso, come si aggirano gli altri approcci alla progettazione del database?