2012-12-27 102 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访问它将非常灵活和强大。