我剛剛發現的擴展方法,我愛他們這麼多,我很害怕他們用好...靜態業務層和擴展方法
我有一個3層的ASP網應用。我DAL是基於實體框架,我的用戶界面是這樣的實體查詢aspx頁面和我的商業邏輯用來作爲公用類使用LINQ:
public List<Site> GetAll()
{
return db.Sites.Include(s=> s.City).ToList();
}
,你需要實例化和使用這樣的:
CSite objsite = new CSite();
List<Site> sites = objsite.GetAll();
後來我發現IQueryable的,所以這樣我可以「再利用」我的查詢是這樣的:
public ObjectQuery<Site> GetAll()
{
return db.Sites.Include(s=> s.City);
}
public IQueryable<Site> Filter(IQueryable<Site> query, string filterWord)
{
return (from s in query
s.Name.Contains(word)
select s);
}
List<Site> sites = objsite.Filter(objsite.GetAll(),"filter word").ToList();
過濾器()方法只適用於GETALL where子句()IQueryable的和THI s是真棒,直到我發現擴展方法,所以我能應付這樣的:
public static IQueryable<Site> Filter(this IQueryable<Site> query, string word)
{
return (from s in query
s.Name.Contains(word)
select s);
}
而這甚至更好,因爲現在我有這樣的智能感知我的疑問:
List<Site> sites = objsite.GetAll().Filter("filter word").ToList();
現在,這在這裏我很害怕,是因爲三件事情的一部分:
你認爲這是一個很好的方法來N層應用程序?這是一個很好的設計模式,或者只是一個懶惰的解決方案嗎?
鑑於擴展方法需要靜態方法下的靜態方法,我的業務層將全部是靜態的,這是一個好方法嗎?是否應該將非擴展方法放在相同的靜態類下? (例如GetAll()或AddNew())
作爲Asp Net應用程序是否有所有這些靜態的東西?
非常感謝你們!