0

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

用户将按名字、姓氏、部门、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
}

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

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

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

对于更好的设计/简单性和不过度设计问题的任何输入?

4

2 回答 2

2

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

您提到的导航 DAO 实现产生的结果的第二个用例是另一种单独的模式,即建立在 DAO 实现之上并提供以不同方式导航结果的功能的值列表处理程序模式。

于 2012-12-27T10:38:08.570 回答
0

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

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

在 SO和其他地方有查询类型可能看起来如何的示例;如果您可以通过IEnumerable(或者可能更好)公开您的数据,那么通过LINQIQueryable访问它将会非常灵活和强大。

于 2014-01-07T11:34:42.390 回答