java - java中从多个表检索数据时的最佳设计原则

标签 java sql oop design-patterns

考虑以下情况。我在资源规划项目中有 3 个表(使用 mysql 创建)

  1. raw_materials(存储有关所有原 Material 的详细信息)

  2. procurement_orders(存储有关发送给供应商以向我们发送报价的请求的所有详细信息。此表引用 raw_materials 表。)

  3. 报价(包含供应商发送给我们的所有报价的详细信息。此表引用采购订单表)。

我使用 java 为每个数据库创建了 dbManager,专门用于存储、检索、删除各个表中的数据。

我的问题是,如果我想检索必须需要其他表中的数据的数据,最好的方法是什么。例如:我想要库存低于 x 的所有原 Material 的报价。那么根据我的说法有两种方法

  1. 我将其写在 rawMaterials 的 dbManager 中。这种技术的缺陷是它试图直接访问其域之外的数据。
  2. 在 raw_Materials 的 dbManager 中创建其他 dbManager 的实例。这里的缺陷是迭代次数会很大。如果有 300 种原 Material ,我将不得不调用采购请求的 dbManager 的方法 300 次。如果它返回多个值,我们将再次调用 dbMnager 的 quatations 许多 no。很多时候(其中许多是不需要的)会影响性能。

我的问题是,在不影响性能的情况下,以正确的面向对象方式设计它的最佳方法是什么。

最佳答案

这是一个相当大的问题,无法轻松快速处理,但是将 java 类与表对齐不一定是一个好方法,正是因为正如您所注意到的,有些事情自然会涉及复杂关系中的多个表。

我建议首先阅读 Martin Fowler 的书 Patterns of Enterprise Application Architecture .

Patterns of Enterprise Application Architecture .

在他的website处也有一些关于这本书中模式的注释。 .

您的用法最接近 Table Data Gateway 。遵循这种模式,在每个 dbManager 类中拥有从关联表中检索数据但涉及另一个表作为 where 子句一部分的方法是完全合理的。

您可能还想考虑Object-relational mapping例如由 Hibernate 实现.

关于java - java中从多个表检索数据时的最佳设计原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4531532/

相关文章:

java - Java 中没有预处理器——如果我有条件地喜欢详细的调试输出,最好的方法是什么?

java - 关于 ServerSocket 和套接字

java - 创建具有对外部类局部变量的完全访问权限的内部类

java - 使用 javassist 创建空构造函数(java)无法开始工作

Java 错误 Native Library already loaded in another classloader

sql - 选择按 id 排序的唯一行

mysql - 带有连接的棘手 MySQL 查询?

mysql - 将表与最新值连接起来,不起作用

javascript - 试图理解对象原型(prototype)

php - 在父函数中调用子对象