Olduğu gibi
Yıllarca yazılım çözümlerimi şu şekilde organize ettim:
- Verilere erişme işini özetlemek için Veri Erişim Katmanı (DAL)
- İş kurallarını veri kümelerine uygulamak, kimlik doğrulamasını işlemek vb. İçin Business Logic Layer (BLL)
- Zamanla oluşturduğum ortak yardımcı yöntemlerin bir kütüphanesi olan Utilities (Util).
- Tabii ki web, masaüstü, mobil, ne olursa olsun Sunum Katmanı.
Şimdi olduğu gibi
Son dört yıldır Microsoft'un Entity Framework'ünü kullanıyorum (ağırlıklı olarak bir .NET geliştiriciyim) ve Entity Framework'ün zaten yapmış olduğu gerçeği nedeniyle DAL'a sahip olmanın temiz olmaktan daha hantal hale geldiğini görüyorum DAL'mın yaptığı bir iş: CRUD'ları bir veritabanında çalıştırma işini soyutlar.
Yani, tipik olarak böyle bir yöntem koleksiyonu olan bir DAL ile sonuçlanır:
public static IQueryable<SomeObject> GetObjects(){
var db = new myDatabaseContext();
return db.SomeObjectTable;
}
Daha sonra BLL'de bu yöntem şu şekilde kullanılır:
public static List<SomeObject> GetMyObjects(int myId){
return DAL.GetObjects.Where(ob => op.accountId == myId).ToList();
}
Bu basit bir örnektir, çünkü BLL tipik olarak birkaç mantık satırı daha uygular, ancak böyle sınırlı bir kapsam için bir DAL'yi korumak biraz fazla gibi görünür.
Sadece DAL'den vazgeçmek ve BLL yöntemlerimi böyle yazmak daha iyi olmaz mıydı:
public static List<SomeObject> GetMyObjects(int myId){
var db = new myDatabaseContext();
return db.SomeObjectTable.Where(ob => op.accountId == myId).ToList();
}
Yukarıda belirtilen nedenlerle DAL'yi gelecekteki projelerden düşürmeyi düşünüyorum, ancak bunu yapmadan önce, bir projede yola çıkmadan ve yapmadığım bir problemi keşfetmeden önce burada toplumu gezme / öngörü / görüşleriniz için yoklamak istedim. t öngörmek.
Herhangi bir düşünce takdir edilmektedir.
Güncelleme
Uzlaşma ayrı bir DAL'ın gerekli olmadığı, ancak (burada kendi çıkarımımı yapma) satıcı kilitlemesini önlemek için iyi bir fikir gibi görünüyor. Örneğin, yukarıda gösterildiği gibi EF çağrılarını soyutlayan bir DAL'ım varsa, eğer Hiç başka bir satıcıya geçmek benim BLL yeniden yazmak gerekmez. Yalnızca DAL'deki bu temel sorguların yeniden yazılması gerekir. Bunu söyledikten sonra, bunun gerçekleşeceği bir senaryo öngörmeyi zor buluyorum. Zaten bir Oracle db bir EF modeli yapabilirsiniz, MSSQL verilen, MySql de (??) mümkün olduğundan eminim, bu yüzden ekstra kod hiç değerli bir ROI verecek emin değilim.
GetMyObjects(int myId)
arasında taklit / stubbing / alay daha kolaydır GetObjects.Where(ob => op.accountId == myId).ToList()
.