数据库和文件持久性之间的接口

问题描述 投票:0回答:1

最近,我开始为浏览器游戏构建工具。 它会抓取一些数据并从几个有用的角度进行显示。

后来,在我开始开发之后,我决定将其变成我正在上大学的课程的一个项目。 问题是我的教授不希望我使用数据库来保存我的数据,而是使用文件来保存序列化的对象。

这会使我的生活更加艰难,并且可能会扼杀我为该工具所想到的某些潜力。 因此,他提出,如果我真的想拥有一个数据库,至少可以选择文件作为数据持久性选项。 他提出的实现是:

为了构建一个接口,我将使用该接口使用将数据保存到数据库的方法来实现类,并使用对对象进行序列化的方法来实现这些类; 那么,选择持久性类型将只是选择接口实现的问题。 就像DAO模式一样。

我想看起来像这样

/* I would choose the implementation here */
//DAO o = new SerializableDAOCarImpl(); // implementation for serializing data
DAO o = new DatabaseDAOCarImpl(); // implementation for interacting with a database

Car c = new Car();
o.add(c);

到目前为止,我还没有做到这一点。 这个计划有什么问题吗? (我觉得有)。

java oop serialization persistence dao
1个回答
2
投票

当您需要一些简单的方法来存储应用程序数据时,您的老师会给您一个正确的提示,将此逻辑与应用程序的另一种逻辑分开并将其隐藏在界面后面。 您的程序不需要知道如何以及在何处存储数据,只需要将数据传递到存储和检索即可。 如果您在序列化方面有问题,或者应用程序的存储部分有问题,您可以在定义合同后借助应用程序保存和读取数据,将其拆开,并专注于另一种逻辑。 例如,当您构建一台新PC时,您可能会以随机顺序组装它,甚至一次只能容纳所有零件的一半,因为所有零件(hdd,内存,gpu等)都有自己的接口,并且来自任何公司的所有实现遵守它的通用界面。

您的应用程序代码将如下所示

class GameClass {
    private final Dao dao;

    GameClass(Dao dao) { this.dao = dao; }

    void gameMethod() {
         Car car = new Car();
         dao.save(car);
    }

}

如您所见, GameClass在这里不知道Dao的实现方式,它仅依赖于契约。

© www.soinside.com 2019 - 2024. All rights reserved.