2012-12-27 104 views
0

我有一個屏幕,在數據庫員工表上進行基本搜索。搜索參數

public class EmployeeSearchParameter 
{ 
    public EmployeeSearchParameterType SearchParameterType { get; set; } 
    public string EmployeeSearchParameterValue { get; set; } 
} 


public enum EmployeeSearchParameterType 
{ 
    FirstName = 1, 
    LastName = 2, 
    EmpId= 3,  
    IsActive = 4 
} 

請問這個是靈活的情況下,如果我有:

截至目前我已經創建了一個SearchParameter類

用戶將姓,名,部門,IsActive等搜索更多支持自定義分頁的選項,比如開始行號,結束行號,排序方式等?

或者我可以創建一個抽象類搜索並執行?

public abstract class Search 
{ 
    public virtual Int PageSize=10; 
    public virtual string SortBy="DESC" 
    //..etc 
    } 

public class EmployeeSearchParameter:Search 
{//stuffs 
} 

或ISEARCH 接口

public class EmployeeSearchParameter:ISearch  
    { } 

爲更好的設計/簡單和不過架構問題的任何輸入?

+0

像頁面大小和排序順序的參數最好由用戶決定,因此會成爲用戶界面的問題。搜索應該只提供一種執行搜索的方法,而不是真的被頁面大小值所關注。 – Ngm

+1

如果您正在尋找靈活性來構建您的選擇查詢,請查看以下網址:http://www.codeproject.com/文章/ 13419/SelectQueryBuilder-Building-complex-and-flexible-S – Ngm

回答

2

您的*Search*類實際上應該用於DAO Pattern。如果你以不同的方式調用它,你的項目將不易被其他開發者理解。具體來說,您將定義一個接口IEmployeeDao和相應的實現EmployeeDao。公共界面將包括CRUD和查找方法,例如create,update,delete,findByName等等。對於C#中的示例代碼,您應該使用Google for DAO和C#的值列表處理程序實現。我只知道Java平臺的示例代碼。

您提到的導航DAO實現產生的結果的第二種用例是另一種單獨的模式Value List Handler pattern,它建立在DAO實現之上,並提供以不同方式導航結果的功能。

+0

好的。我應該遵循什麼?我是否需要更改代碼或請分享您的代碼,如果有的話,那可以幫助我。非常感謝 –

0

使用DAO模式的缺點與存儲庫模式的不足之處類似:您隱藏底層技術的搜索功能,以便編寫一組非常有限的可能查詢。

如果您的DAO/repo開始暴露越來越多且更靈活的搜索功能,那麼很可能實現的方法與您的DAL的工作方式類似;您很可能會開始開發查詢類型來表示更復雜的關係。這已經存在於各種數據庫訪問技術中。 (而且,我相信,與DAO相比,這是一種更爲c#慣用的詞組搜索查詢方式。)

examples on SO以及其他地方的查詢類型的外觀;如果您可以通過IEnumerable(或可能更好的IQueryable)公開您的數據,通過LINQ訪問它將非常靈活和強大。