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

Interaction between Business Logic Layer and Database Access layer

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

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

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

请告诉我您的想法,从架构的角度来看,这在某种程度上是否是一个干净的设计,或者我是否应该将此逻辑全部包含在我的数据库访问层中。

你根本不需要把这个逻辑带到业务层。

按照以下步骤操作

  1. 从业务层向DB1请求数据
  2. 数据访问层returns从DB1到业务层的数据
  3. 在业务层中操作数据。 (计算、转换等)
  4. 请求数据访问层将这个新数据插入 DB2 并将处理后的数据传递给数据访问层
  5. 数据访问层写入 DB2

这种方式更优雅,可以保持当前架构不变。

编辑

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

would it be bad practice to include the construction of SQL queries in the Business Logic Layer?

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

I need to implement a procedure that gets data from database DB1, manipulates it, and then writes it into DB2

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