方案
您有一个数据传输对象程序集,其中包含10个类,这些类完全代表数据库中的10个表。 您生成/构建一个DAL图层,其中包含类似 -
的方法 DTOForTable1[] GetDataFromTable1();
DTOForTable2[] GetDataFromTable2();
依旧......
问题
如何创建隐藏众多方法的方法从客户端代码中获取每个表中的数据?我想在服务或业务层中使用的方法可能看起来像 -
SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
我该怎么做?这甚至可能吗?
如果(1)是,那么这是一个好习惯吗?
如果(1)和(2)是,是否会使设计简化或复杂化?
提前致谢。
答案 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)
现在将具体的表类实现为继承抽象表访问类是非常常见的。抽象类具有查询表的通用方法。每个具体类都可以声明哪个对应的数据库表(也可能是列和表间关系)。
设计模式有助于包含ActiveRecord和Table Data Gateway。