Confuso sullo sviluppo di applicazioni a più livelli

1

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?

    
posta Ortund 21.05.2014 - 12:19
fonte

1 risposta

2

Una tipica applicazione a più livelli può essere composta in molti modi diversi. Uno di questi modi è molto simile a quello che hai inventato finora. Gli strati vanno in qualche modo come questo (sentiti libero di modificare ed estendere secondo il tuo caso d'uso):

  1. Un livello Modelli , che contiene gli oggetti del database. Queste classi si collegano direttamente al tuo database.

  2. Un livello Accesso ai dati , che contiene il codice della struttura dell'entità e utilizza (1) per fornire operazioni CRUD, ecc.

  3. Un livello Business Logic o Dominio , che utilizza (2) e aggiunge la logica aziendale, le regole e le funzioni specifiche del dominio al mix

  4. A volte, questo livello aziendale definisce i propri oggetti dominio . Anche questi sono oggetti modello, ma si trovano nel contesto dell'utente finale piuttosto che in quello del database. Un singolo oggetto di livello aziendale può essere una composizione / trasformazione logica di più oggetti del modello di database.

  5. Infine, un livello Applicazione , che espone un'interfaccia utente specifica per un consumatore specifico. Utilizza le funzioni del livello aziendale sottostante per eseguire il lavoro effettivo.

Non è necessario che questi layer si trovino in pacchetti separati. Tutto dipende dalla complessità e dalle dimensioni della tua applicazione. L'accoppiamento libero aiuta a separare gli strati in moduli indipendenti come e quando se ne presenta la necessità.

    
risposta data 21.05.2014 - 12:34
fonte

Leggi altre domande sui tag