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

Interface between Database and File persistence

最近我开始为网页游戏构建一个工具。它抓取了一些数据并从几个有用的角度展示了这些数据。

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

这会让我的生活更加艰难,并且可能会扼杀我对该工具的一些潜力。所以他提议,如果我真的想要一个数据库,我至少会让选择文件作为数据持久化选项成为可能。他提出的实现是:

构建一个接口,我将从中实现 类 使用将数据保存到数据库的方法,以及 类 使用序列化对象的方法;那么,选择持久化类型只是选择接口实现的问题。像 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);

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

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

你的应用程序代码将是这样的

class GameClass {
    private final Dao dao;

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

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

}

如你所见GameClass不知道这里的Dao是怎样实现的,只依赖契约