我目前正在爲我們的新應用程序構建數據訪問層和業務邏輯層類,並且我有一個問題(很明顯)。首先,這裏有一些細節,可以幫助:通用DAL/BLL類
- 使用實體框架5
- 每個「層」在不同的類庫和命名空間(即App.Model,App.DAL分離模型類和數據訪問,App.BLL)
從DAL開始 - 我決定爲所有DAL類編寫一個基類來繼承。
public abstract class DALBase<T> : IDisposable
{
protected AppEntities context;
protected DbSet set;
public DALBase()
{
context = new OECCORPEntities();
set = context.Set(typeof(T));
}
protected virtual void Save()
{
context.SaveChanges();
}
public virtual void Add(T model)
{
set.Add(model);
Save();
}
public virtual T Get(int id)
{
return (T)set.Find(id);
}
public virtual List<T> GetAll()
{
return set.OfType<T>().ToList();
}
public virtual void Delete(int id)
{
T obj = Get(id);
set.Remove(obj);
Save();
}
public virtual void Update()
{
Save();
}
public void Dispose()
{
context.Dispose();
}
}
如您所見,基類實現了一個泛型類型,它應該是DAL類負責處理的模型的類型。使用泛型類型,在構造函數中,它使用泛型參數的類型創建一個DbSet - 在以下預定義類似CRUD的虛擬函數(add,get等)中使用該類型。
然後我明白了 - 等一下...因爲它是通用的,我實際上不必爲每個模型都實現DAL類。我可以寫這樣的東西:
public class GenericDAL<T> : DALBase<T>
{
public GenericDAL() : base() {}
}
......我可以使用任何模型。好的,等到業務邏輯層。我爲BLL創建了一個基類:
public abstract class BLLBase<T>
{
protected GenericDAL<T> dal;
public BLLBase()
{
dal = new GenericDAL<T>();
}
public virtual void Add(T model)
{
dal.Add(model);
}
public virtual T Get(int id)
{
return dal.Get(id);
}
public virtual List<T> GetAll()
{
return dal.GetAll();
}
public virtual void Delete(int id)
{
dal.Delete(id);
}
public virtual void Update()
{
dal.Update();
}
}
...它使用GenericDAL來完成它的工作。因此,在一個simular時尚,我只是寫了GenericBLL類,看起來像這樣:
public class GenericBLL<T> : BLLBase<T>
{
public GenericBLL() : base() { }
}
並測試它,一個簡單的控制檯應用程序:
class Program
{
static void Main(string[] args)
{
GenericBLL<ADMIN> bll = new GenericBLL<ADMIN>();
List<ADMIN> admins = bll.GetAll();
}
}
...其中,「管理」是模型類型。奇蹟般有效。
這個想法背後是爲了避免必須爲每個模型編寫DAL/BLL類,除非它需要額外的功能。有人可以告訴我爲什麼我不想不想想這樣做嗎?我認爲通用的DAL/BLL類可以完成工作並節省開發時間。
謝謝你的時間。
沒錯。如果一個模型需要更多的標準crud函數,我會爲它實現一個特定的BLL類。很多「模型」所需的功能是非常基礎的。所以泛型類將會提供很多服務。 – zday 2013-02-21 18:48:43
我建議您從一開始就爲所有實體編寫特定的BLL類。他們只需要從通用基類繼承的存根。通過這樣做,如果您稍後決定添加一些業務邏輯,則不必更改類型。 – 2013-02-22 08:26:47
偉大的建議 - 很有意義。謝謝! – zday 2013-03-05 18:06:25