【问题标题】:Interface between Database and File persistence数据库和文件持久性之间的接口
【发布时间】:2017-11-07 23:46:05
【问题描述】:

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

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

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

为了构建一个接口,我将通过该接口实现具有将数据保存到数据库的方法的类,以及具有序列化对象的方法的类;那么,选择持久性类型只是选择接口实现的问题。类似于 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】:

    你的老师给了你一个正确的提示,当你需要一些方法来存储你的应用程序的数据时,让这个逻辑与应用程序的另一个逻辑分开并将其隐藏在界面后面。您的程序不需要知道您存储数据的方式和位置,它只想将数据传递给存储和检索。更重要的是,如果您在序列化或应用程序的存储部分遇到问题,您可以在应用程序保存和读取数据的帮助下定义合约后将其推开并专注于另一个逻辑。例如,当您构建一台新 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的实现是什么样的,它只依赖于契约。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-16
      • 2011-12-27
      • 1970-01-01
      • 2014-01-18
      相关资源
      最近更新 更多