Design patterns 如何为DAL创建一个通用选择方法?

Design patterns 如何为DAL创建一个通用选择方法?,design-patterns,oop,poco,Design Patterns,Oop,Poco,场景 您有一个数据传输对象的程序集,其中包含10个类,这些类正好表示数据库中的10个表。 生成/构建具有以下方法的DAL层: DTOForTable1[] GetDataFromTable1(); DTOForTable2[] GetDataFromTable2(); 等等 问题 我如何制作一个方法来隐藏从客户机代码的每个表中获取数据的众多方法?例如,我希望在服务层或业务层中使用的方法- SomeGenericDTO[] GetDataFromTable(TableTypeEnum t

场景

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

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

问题

我如何制作一个方法来隐藏从客户机代码的每个表中获取数据的众多方法?例如,我希望在服务层或业务层中使用的方法-

SomeGenericDTO[] GetDataFromTable(TableTypeEnum tableTypeEnum);
  • 我该怎么做?这可能吗

  • 如果第(1)项为“是”,这是一种良好的做法吗

  • 如果(1)和(2)的答案是肯定的,这会简化设计还是使设计复杂化


  • 提前感谢。

    您可以将其定义为:

    T[] GetDataFromTable1<T>() where T:IDto
    {
       // you can know the table with the type of T
    }
    
    T[]GetDataFromTable1(),其中T:IDto
    {
    //您可以知道T类型的表
    }
    

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

    您可以将其定义为:

    T[] GetDataFromTable1<T>() where T:IDto
    {
       // you can know the table with the type of T
    }
    
    T[]GetDataFromTable1(),其中T:IDto
    {
    //您可以知道T类型的表
    }
    

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

    我的DAL是如何做到这一点的:

    List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());
    
    List customers=SQL.Read(new SearchCriteria(),new customers());
    
    要执行联接,请执行以下操作:

    List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));
    
    List customers=SQL.Read(new SearchCriteria()、new customers(new OrderDetails());
    
    DTO类本身决定访问哪个表,其属性决定检索哪些列


    我无法回答这是最好的还是好的做法。这种做法对我来说已经奏效很长时间了。没有诸如“GetById”、“GetAll”等无关的方法。

    我的DAL就是这样做的:

    List<entity> customers = SQL.Read(new SearchCriteria(), new Customers());
    
    List customers=SQL.Read(new SearchCriteria(),new customers());
    
    要执行联接,请执行以下操作:

    List<entity> customers = SQL.Read(new SearchCriteria(), new Customers(new Orders(new OrderDetails())));
    
    List customers=SQL.Read(new SearchCriteria()、new customers(new OrderDetails());
    
    DTO类本身决定访问哪个表,其属性决定检索哪些列


    我无法回答这是最好的还是好的做法。这种做法对我来说已经奏效很长时间了。没有诸如“GetById”、“GetAll”等无关的方法。

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


    有助于包含和的设计模式。

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


    有助于包括和的设计模式。

    如果决定否决,请发表评论。如果决定否决,请发表评论。我已经阅读了有关存储库模式的内容,但我认为我并不完全理解它。你能推荐一些链接吗?在Eric Evans的“域驱动设计”中,第6章包含了关于存储库模式的信息。我已经阅读了关于存储库模式的内容,但我认为我并不完全理解它。你能推荐一些链接吗?在Eric Evans的“域驱动设计”中,第6章包含了关于存储库模式的信息。这非常有趣!你能提供一些链接或样本吗?这很有趣!你能提供一些链接或样本吗??