java - 在 Java 中实现对象列表的最佳实践

标签 java design-patterns

我目前正在致力于改进一些旧的 uni 作业,将它们从可序列化文件转移到任何其他形式的存储,主要是 SQL 数据库。 我了解关系数据库设计的概念以及与 OOP 类的相似之处,但是,我不完全确定如何从 OOP 设计的角度解决这个问题。

现在我有一个酒店类,其中包含房间列表作为属性,每个房间都有一个客人列表作为属性( full code here )

回到使用文件时,我可以使用 Serialized 接口(interface)标记这些类,并将父对象存储在单个文件中。但是,当使用关系数据库时,我将每个列表存储为单个表,并使用单独的查询来获取相应的结果。 add() 操作也是如此:对于数据库,我可以执行类似 Guest.add() 的操作,并将所有必需的字段直接添加到数据库中,而对于我当前的设计,我需要调用 Room.getGuestList().add() (或类似的方法)。

我完全理解这两种方法都不是理想的,因为这两个类应该只关心存储数据而不是 add 方法的实现,但即使我将其分离在一个类中,我仍然应该定义每个类中的 List 属性?

我很确定我在这里缺少一种设计模式,但我找不到可以解决此问题的设计模式,或者可能只是我被教导了错误。

感谢您的回答

编辑:感谢所提供的答案,我决定按照 DAO 模式转换我的实现,如 question 中所述。和 Oracle documentation .

最佳答案

通常您会有 3 张 table :酒店、房间、客人。 房间与酒店(酒店 ID)相关,客人与房间(房间 ID)相关。就是这样。 这些关系可以使用某种 ORM 轻松地反射(reflect)在 OOP 中。 JPA 与 Hibernate 就是一个很好的例子。检查出。您将能够像您所描述的那样获取酒店、其客房以及酒店的所有客人,而无需在代码中使用单个 SQL 查询。

关于java - 在 Java 中实现对象列表的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48872789/

相关文章:

java - Java 6 中的向下转型有多昂贵?

java.lang.IllegalStateException : incompatible return value type 错误

database - 我应该在具有数据库访问权限的应用程序中应用哪些设计模式

Java 从多个 session 与数据库进行安全通信

java - Apache Storm : SLF4J: Class path contains multiple SLF4J bindings

Java虚拟堆空间

java - 带有 Spring Data 和 Cassandra @Query 的 IN 子句

design-patterns - 即使您知道不应该使用什么反模式?

c++ - OOP:派生子类中数据库连接的正确类设计?

ruby-on-rails - (如何)我可以使用表单对象进行编辑/更新例程吗?