Il modo in cui era
Per anni ho organizzato le mie soluzioni software come tali:
- Data Access Layer (DAL) per astrarre l'attività di accesso ai dati
- Business Logic Layer (BLL) per applicare le regole di business ai set di dati, gestire l'autenticazione, ecc.
- Utilità (Util) che è solo una libreria di metodi di utilità comuni che ho costruito nel tempo.
- Layer di presentazione che potrebbe ovviamente essere web, desktop, mobile, qualunque cosa.
Così com'è adesso
Negli ultimi quattro anni ho usato Microsoft Entity Framework (sono principalmente un sviluppatore .NET) e sto scoprendo che avere il DAL sta diventando più ingombrante che pulito a causa del fatto che Entity Framework ha già fatto il lavoro che faceva il mio DAL: riassume il business di eseguire CRUD su un database.
Quindi, di solito finisco con un DAL che ha una raccolta di metodi come questo:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
Quindi, nel BLL, questo metodo viene utilizzato come tale:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
Questo è un semplice esempio, naturalmente, poiché in BLL verrebbero applicate molte più linee di logica, ma sembra un po 'eccessivo mantenere un DAL per un ambito così limitato.
Non sarebbe meglio abbandonare il DAL e semplicemente scrivere i miei metodi BLL come tali:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
Sto pensando di abbandonare il DAL da progetti futuri per i motivi sopra indicati ma, prima di farlo, volevo sondare la community qui per il tuo senno di poi / lungimiranza / opinioni prima di iniziare un progetto e scoprire un problema che non ho riscontrato t anticipare.
Ogni pensiero è apprezzato.
Aggiornare
Il consenso sembra essere che un DAL separato non sia necessario ma (facendo la mia deduzione qui) è una buona idea per evitare il blocco del fornitore. Ad esempio, se ho un DAL che sta astrattando le chiamate EF come illustrato sopra, se io mai passare a qualche altro fornitore non ho bisogno di riscrivere il mio BLL. Solo quelle query di base nel DAL dovrebbero essere riscritte. Detto questo, trovo difficile immaginare uno scenario in cui ciò accada. Posso già creare un modello EF di un db Oracle, MSSQL è un dato di fatto, sono abbastanza sicuro che anche MySql sia possibile (??), quindi non sono sicuro che il codice aggiuntivo possa mai garantire un ROI utile.
GetMyObjects(int myId)
è più facile che deridere / stub / fingere di GetObjects.Where(ob => op.accountId == myId).ToList()
.