业务逻辑层与数据库访问层的交互
Interaction between Business Logic Layer and Database Access layer
我目前正在实施一个系统,我有一个关于系统中不同元素与直接与数据库交互的 class 之间的交互的问题(打开和关闭连接,执行 sql 查询等)。
到目前为止,我的业务逻辑层正在将 所有 SQL 查询(取决于某些输入)的构造推迟到我的数据库访问层,这反过来会调用数据库处理 class 来执行每个查询。请注意,在我的业务逻辑层之上是 GUI。
问题是:在业务逻辑层中包含 SQL 查询的构造是否是一种不好的做法?我问这个是因为我需要实现一个过程,该过程 从数据库 DB1 获取数据,对其进行操作,然后将其写入 DB2。因此,我发现硬编码这些 SQL 查询会更容易保留在我的业务层中。
请告诉我您的想法,从架构的角度来看,这在某种程度上是否是一个干净的设计,或者我是否应该将此逻辑全部包含在我的数据库访问层中。
你根本不需要把这个逻辑带到业务层。
按照以下步骤操作
- 从业务层向DB1请求数据
- 数据访问层returns从DB1到业务层的数据
- 在业务层中操作数据。 (计算、转换等)
- 请求数据访问层将这个新数据插入 DB2 并将处理后的数据传递给数据访问层
- 数据访问层写入 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" 可以在任一位置(业务层或数据层)完成,具体取决于操作的 性质。比如是纯粹的数据转换,还是依赖于业务层的其他方面?
我目前正在实施一个系统,我有一个关于系统中不同元素与直接与数据库交互的 class 之间的交互的问题(打开和关闭连接,执行 sql 查询等)。
到目前为止,我的业务逻辑层正在将 所有 SQL 查询(取决于某些输入)的构造推迟到我的数据库访问层,这反过来会调用数据库处理 class 来执行每个查询。请注意,在我的业务逻辑层之上是 GUI。
问题是:在业务逻辑层中包含 SQL 查询的构造是否是一种不好的做法?我问这个是因为我需要实现一个过程,该过程 从数据库 DB1 获取数据,对其进行操作,然后将其写入 DB2。因此,我发现硬编码这些 SQL 查询会更容易保留在我的业务层中。
请告诉我您的想法,从架构的角度来看,这在某种程度上是否是一个干净的设计,或者我是否应该将此逻辑全部包含在我的数据库访问层中。
你根本不需要把这个逻辑带到业务层。
按照以下步骤操作
- 从业务层向DB1请求数据
- 数据访问层returns从DB1到业务层的数据
- 在业务层中操作数据。 (计算、转换等)
- 请求数据访问层将这个新数据插入 DB2 并将处理后的数据传递给数据访问层
- 数据访问层写入 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" 可以在任一位置(业务层或数据层)完成,具体取决于操作的 性质。比如是纯粹的数据转换,还是依赖于业务层的其他方面?