Informazioni su Three Layer Architecture

-2

Attualmente sto sviluppando un progetto secondario per la scuola e dovrei usare un'architettura a tre livelli nel progetto.

Sto lavorando con C # in .NET e sto lavorando anche su Windows Forms e con l'aiuto di Entity Framework ho creato un database (Model First) connesso al progetto in una soluzione separata. Dopo che il database è stato generato correttamente ho creato una classe di contesto del database che ottiene e imposta valori sulle entità nel mio database attraverso le classi create dal modello, in questo modo:

// User class generated by model
public partial class User
public int Id { get; set; }
public string Name { get; set; }

// Database context class that communicates with the generated class
public class DatabaseContext : DbContext
public DbSet<User> Users { get; set; }

Per cercare nel database mentre si fa qualcosa (ad esempio corrispondendo a un determinato nome utente) diciamo che ho messo qualcosa di simile all'interno di uno dei miei moduli su un gestore di eventi:

using (var db = new DatabaseSolution.DatabaseContext()) 
{ 
  var userlist = db.Users.ToList();
    foreach(var user in userlist) 
    {
       if (textboxName.Text.Equals(user.Name)
       {
          do stuff
       }
    }
}

La mia domanda è questa: è un'architettura a tre strati come ho scritto sopra o devo avere una classe aggiuntiva che interagisca sia con la classe di contesto del database che con i moduli?

    
posta schmakydoodle 14.03.2018 - 19:16
fonte

1 risposta

2

L'utilizzo di Entity Framework, in particolare del modello, rende difficile dimostrare la separazione della logica aziendale e dei livelli del database.

Allo stesso modo, la tua scelta di Windows Form, con il suo stretto accoppiamento di visualizzazione a codice dietro pagina, rende anche più difficile mostrare la separazione tra presentazione e logica aziendale.

Non è impossibile introdurre classi extra come suggerisci, ma sarà un po 'forzato.

Ti consiglio di ricominciare.

  • Prima crea il tuo livello aziendale in un progetto Libreria di classi. Non fare riferimento a nessun altro progetto o database. Questo è il livello aziendale

  • In secondo luogo, crea un'altra libreria di classi chiamata repository. questo può fare riferimento alla tua logica aziendale Class Lib e SqlClient. utilizzare SqlClient con istruzioni SQL con hardcoded anziché un ORM poiché ciò renderà la separazione molto chiara. Programmare tutto il carico e salvare dai metodi del database in questa libreria di classi. Questo è il livello dati

  • In terzo luogo, crea un progetto WPF. Quali sono le nuove forme di Windows. assicurati che i tuoi moduli si associno alle classi ViewModel anziché utilizzare il codice sottostante. Ciò ti offre una chiara separazione tra la tua logica di presentazione e di business.

Fai riferimento alla tua biblioteca di classi BL e usa gli oggetti da essa nelle classi ViewModel

Fai riferimento alla tua classe di deposito Lib e usala in ViewModels per caricare e salvare i dati in risposta all'intervento di interfaccia utente

Ora hai tre progetti separati nella stessa soluzione. Ciascuno si associa chiaramente a un singolo livello di Three Layer Architecture.

L'approccio iniziale che hai preso è interessante in quanto queste tecnologie sono state inizialmente create da Microsoft per semplificare le cose allo sviluppatore. Quando faccio clic su un pulsante, si chiama l'evento button_click. Quando trascino il mio database nel mio progetto, le classi, i metodi di salvataggio e caricamento vengono generati automaticamente per me!

È solo in progetti di grandi dimensioni in cui i vantaggi di cose come l'architettura multilivello e la separazione di queste preoccupazioni iniziano davvero a mostrare il loro valore.

Questo è il motivo per cui cose come le pagine 'code behind' e EF sono spesso considerate 'cattive' se usate in ambienti aziendali.

    
risposta data 14.03.2018 - 19:54
fonte

Leggi altre domande sui tag