业务逻辑层与数据库访问层之间的交互

时间:2016-06-21 12:31:38

标签: c# design-patterns architecture

我目前正在实现一个系统,我对系统中不同元素之间的交互有一个问题,该类与直接与数据库交互的类(一个打开和关闭连接,执行sql查询等)。

到目前为止,我的业务逻辑层正在推迟构建所有SQL查询(取决于某些输入)到我的数据库访问层,而数据库访问层又调用数据库处理类来执行每个查询。请注意,我的业务逻辑层正上方是GUI。

问题是:在业务逻辑层中包含SQL查询的构造是不好的做法?我问这个是因为我需要实现一个过程,从数据库DB1获取数据,操作它,然后将其写入DB2 。因此,我发现硬编码这些SQL查询将更容易保留在我的业务层中。

请从架构的角度让我知道您的想法,如果这是一个干净的设计,或者我应该在我的数据库访问层中包含这个逻辑。

2 个答案:

答案 0 :(得分:1)

  

在业务逻辑层中包含SQL查询的构造是不好的做法吗?

最有可能。业务层通常应该与数据库无关。

  

我需要实现一个从数据库DB1获取数据,操作它,然后将其写入DB2的过程

因此,您需要两个数据层对象 - 一个用于从DB1获取数据,另一个用于将其保存在DB2中。 "操纵"可以在任何一个地方(业务层或数据层)完成,具体取决于操作的性质。例如,它纯粹是数据转换,还是依赖于业务层的其他方面?

答案 1 :(得分:0)

您根本不需要将此逻辑带到Business层。

请按照以下步骤

  1. 从业务层
  2. 向DB1请求数据
  3. 数据访问层将数据从DB1返回到业务层
  4. 操作业务层中的数据。 (计算,转换和什么不是)
  5. 请求数据访问层将此新数据插入DB2并将处理后的数据传递到数据访问层
  6. 数据访问层写入DB2
  7. 这种方式更优雅,您可以保持当前架构不变。

    编辑

    您可以创建一个单独的数据访问层来访问DB2,并让Business层在步骤4中调用它。这样,您可以使数据访问层更加一致。