0

设想

您有一个数据传输对象程序集,其中包含 10 个类,这些类准确地代表数据库中的 10 个表。您生成/构建具有以下方法的 DAL 层 -

  DTOForTable1[] GetDataFromTable1();
  DTOForTable2[] GetDataFromTable2();

等等....

问题

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

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

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

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

提前致谢。

4

3 回答 3

2

你可以像这样定义它:

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

也就是说,我宁愿使用不同的方法甚至类来使用它。我改用存储库模式,我建议查找有关它的信息。

于 2009-03-12T19:00:30.963 回答
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”等无关的方法。

于 2009-03-12T19:03:55.137 回答
1

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

有助于包括ActiveRecordTable Data Gateway的设计模式。

于 2009-03-12T19:05:50.000 回答