你如何为你的DAL制作一个通用选择方法?

时间:2009-03-12 18:39:17

标签: design-patterns oop poco

方案

您有一个数据传输对象程序集,其中包含10个类,这些类完全代表数据库中的10个表。 您生成/构建一个DAL图层,其中包含类似 -

的方法
  DTOForTable1[] GetDataFromTable1();
  DTOForTable2[] GetDataFromTable2();

依旧......

问题

如何创建隐藏众多方法的方法从客户端代码中获取每个表中的数据?我想在服务或业务层中使用的方法可能看起来像 -

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
  1. 我该怎么做?这甚至可能吗?

  2. 如果(1)是,那么这是一个好习惯吗?

  3. 如果(1)和(2)是,是否会使设计简化或复杂化?

  4. 提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以将其定义为:

T[] GetDataFromTable1<T>() where T:IDto
{
   // you can know the table with the type of T
}

那就是说,我宁愿使用不同的方法甚至是类来处理它。我使用存储库模式,我建议在其上查找信息。

答案 1 :(得分:1)

这是我的DAL如何做到的:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());

执行联接:

List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));

DTO类本身确定要访问的表及其属性确定要检索的列。

如果这是一个最佳或良好的做法,我无法回答。这种做法长期以来一直在为我工作。没有任何无关的方法,如“GetById”,“GetAll”等。

答案 2 :(得分:1)

现在将具体的表类实现为继承抽象表访问类是非常常见的。抽象类具有查询表的通用方法。每个具体类都可以声明哪个对应的数据库表(也可能是列和表间关系)。

设计模式有助于包含ActiveRecordTable Data Gateway