Quindi, per il primo grande progetto per cui sono stato pagato, ho deciso di fare le cose per bene.
A tal fine, ho creato diversi progetti nella mia soluzione. Alcuni di questi progetti sono generici e gestiscono elementi comuni che possono essere utilizzati in qualsiasi progetto (cose come la registrazione e così via), ma non è questo il punto centrale della mia domanda.
I progetti di cui mi sto occupando in questo caso riguardano principalmente il database e l'effettiva applicazione web che lo utilizzerà.
Quindi ho un Ortund.Objects
Class Library Project e un Ortund.DBContext
Class Library Project.
Ortund.Objects
Questo progetto definisce le classi, impostando le proprietà e i valori predefiniti che costituiscono il database.
Ad esempio, la classe Users definisce proprietà come Username, EmailAddress, Password
Ortund.DBContext
Questo progetto utilizza Entity Framework e il progetto Objects per creare il database. DbSet delle classi nel progetto Objects e vari altri componenti definiscono esplicitamente la struttura del database.
Ovviamente, data questa struttura, avrei il progetto DBContext che fa riferimento al progetto Objects. Ciò significa che, mentre da qualche parte nella mia testa, ha senso mettere tutti i miei metodi e le mie funzioni che l'app web utilizzerà nel progetto Objects, in realtà non sarei in grado di fare nulla perché non avrò DbContext. Per fare riferimento al progetto DBContext creerebbe un riferimento circolare.
Quindi, per far sì che la mia applicazione interagisca con il database adesso, l'unica opzione che posso vedere è creare un quarto progetto che funga da livello dati, diventando in effetti un "intermediario" tra l'applicazione web e il altri 2 progetti.
Quando ho suggerito questo su IRC, qualcuno ha risposto con il seguente:
No, the application layer uses the database layer to provide persistence to the domain layer.
Non capisco cosa significhi. Qualcuno può aiutarmi a capire come strutturare al meglio questa applicazione?