搜索参数

时间:2012-12-27 10:30:36

标签: c# design-patterns design-principles

我有一个屏幕,可以对数据库员工表进行基本搜索。

用户将按名字,姓氏,部门,IsActive等进行搜索

截至目前,我已经创建了一个SearchParameter类:

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


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

如果我有更多选项支持自定义分页,如开始行号,结束行号,排序等,这是否会灵活?

或者我可以创建一个抽象类搜索并实现?

 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    
  { }

任何输入都是为了更好的设计/简单性而不是过度设计问题?

2 个答案:

答案 0 :(得分:2)

您的*Search*课程实际上应该是DAO Pattern的用途。如果以不同的方式调用它,那么其他开发人员将无法轻易理解您的项目。具体来说,您将定义一个接口IEmployeeDao和相应的实现EmployeeDao。公共接口将包括CRUD和finder方法,例如createupdatedeletefindByName等。对于C#中的示例代码,您应该使用Google for DAO和C#的值列表处理程序实现。我只知道Java平台的示例代码。

您提到的导航DAO实现生成的结果的第二个用例是另一个单独的模式,Value List Handler pattern构建在DAO实现之上,并提供以不同方式导航结果的功能。 / p>

答案 1 :(得分:0)

使用DAO模式的缺点类似于存储库模式的缺点:您隐藏了底层技术的搜索功能,支持编写一组非常有限的可能查询。

如果您的DAO / repo开始展示越来越灵活的搜索功能,那么实施很可能会与DAL的工作方式类似。您可能会开始开发一种Query类型来表达更复杂的关系。这已经存在于各种数据库访问技术中。 (而且,我相信,与DAO相比,这是一种更加用于搜索查询的惯用方式。)

examples on SO和其他地方有关于查询类型的外观;如果您可以通过IEnumerable(或可能更好IQueryable)公开您的数据,那么通过LINQ访问它将非常灵活和强大。