实现Java

时间:2018-02-19 19:16:53

标签: java design-patterns

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

现在我有一个酒店类,房间列表为房产,每个房间都有一个房源列表(full code here

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

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

我很确定我在这里错过了一个设计模式,但我找不到能够解决这个问题的那个,或者可能只是因为我被教导错了。

感谢您的回答

编辑:我已经决定感谢所提供的答案,以便按照此questionOracle documentation中所述的DAO模式转换我的实现。

1 个答案:

答案 0 :(得分:2)

通常你会有3张桌子:酒店,房间,客人。 客房与酒店(酒店身份证)有关系,客人与房间(房间ID)有关。就是这样。 使用某种ORM可以很容易地在OOP中反映这些关系。带有Hibernate的JPA就是一个很好的例子。检查出。您将能够像在您的代码中使用单个SQL查询一样获得酒店,客房和酒店的所有客人。