C# 搜索参数

C# 搜索参数,c#,design-patterns,design-principles,C#,Design Patterns,Design Principles,我有一个屏幕,可以对数据库雇员表进行基本搜索 用户将按名字、姓氏、部门、iActive等进行搜索 现在,我已经创建了一个SearchParameter类: public class EmployeeSearchParameter { public EmployeeSearchParameterType SearchParameterType { get; set; } public string EmployeeSearchParameterValue { get; set; }

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

用户将按名字、姓氏、部门、iActive等进行搜索

现在,我已经创建了一个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    
  { }

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

您的
*Search*
类实际上就是应该使用的。如果您以不同的方式调用它,您的项目将不容易被其他开发人员理解。具体来说,您将定义一个接口
IEEmployeeDAO
和相应的实现
EmployeeDao
。公共界面将包括CRUD和finder方法,例如,
创建
更新
删除
findByName
,等等。对于C中的示例代码,您应该搜索DAO和C中的值列表处理程序实现。我只知道Java平台的示例代码


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

使用DAO模式的缺点与存储库模式的缺点相似:您隐藏了底层技术的搜索功能,而倾向于编写非常有限的一组可能的数据集查询

如果您的DAO/repo开始公开越来越灵活的搜索功能,那么很可能实现的布局与您的工作方式类似;您可能会开始开发一种查询类型来表示更复杂的关系。这已经存在于各种数据库访问技术中。(我认为,与DAO相比,这是一种更为c#惯用的短语搜索查询方式。)


关于查询类型的外观,有很多不同的定义;如果您可以通过
IEnumerable
(或者更好的
IQueryable
)公开数据,那么通过访问数据将非常灵活和强大。

Ok。我应该遵循什么?我是否需要任何代码更改或请共享您的代码,如果您有任何,这对我有帮助。谢天谢地,页面大小和排序顺序等参数理想情况下是由用户决定的,因此会成为用户界面的关注点。搜索只应提供一种执行搜索的方法,而不是真正关心页面大小值。如果您希望在构建select查询时具有灵活性,请查看以下内容: