Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javafx-从数据库预加载外部数据的常见方法是什么?_Java_Database_Oop_Javafx_Static - Fatal编程技术网

Javafx-从数据库预加载外部数据的常见方法是什么?

Javafx-从数据库预加载外部数据的常见方法是什么?,java,database,oop,javafx,static,Java,Database,Oop,Javafx,Static,我对Javafx很陌生,所以如果这是一个明显的问题,我已经道歉了。我正在使用一个主类来做一些整理工作,并预加载来自两个json文件的内容,这样每当应用程序需要获取数据时,它就不需要读取文件。在我看来,这是最有效的方法。然后,每当业务逻辑需要数据时,它就可以调用静态列表,它就在那里。但它似乎完全违背了整个OOP范式,当我试图模仿它进行测试时,它已经让我头疼了。那么,通常的做法是什么呢 1) 如何在程序一开始就预加载数据库,而不会在以后很难访问 2) 如何保持OOP并使预加载对象在整个应用程序运行期

我对Javafx很陌生,所以如果这是一个明显的问题,我已经道歉了。我正在使用一个主类来做一些整理工作,并预加载来自两个json文件的内容,这样每当应用程序需要获取数据时,它就不需要读取文件。在我看来,这是最有效的方法。然后,每当业务逻辑需要数据时,它就可以调用静态列表,它就在那里。但它似乎完全违背了整个OOP范式,当我试图模仿它进行测试时,它已经让我头疼了。那么,通常的做法是什么呢

1) 如何在程序一开始就预加载数据库,而不会在以后很难访问

2) 如何保持OOP并使预加载对象在整个应用程序运行期间保持持久性

json中的数据是字符串,需要与TCP上的传入数据进行实时比较。因此,需要有效率。抱歉,如果这个问题已经得到回答,但我似乎找不到合适的策略或模式来解决这个问题


    public static List<DrefData> database;
    public static List<LayoutData> layout;

    public static void main(String[] args) {

        Initialize.logReportLevel("trace");

        // load databases
        DrefDataIO io = new DrefDataIO();
        LayoutDataIO lio = new LayoutDataIO();
        database = io.loadDatabase();
        layout = lio.loadLayoutDatabase();

        // open main window
        MainWindow.main(args);
    }
}

公共静态列表数据库;
公共静态列表布局;
公共静态void main(字符串[]args){
初始化.logReportLevel(“跟踪”);
//加载数据库
DrefDataIO=新的DrefDataIO();
LayoutDataIO lio=新的LayoutDataIO();
database=io.loadDatabase();
layout=lio.loadLayoutDatabase();
//打开主窗口
MainWindow.main(args);
}
}

您试图实现的是一个简单的缓存,它是数据库的内存表示形式,可以快速访问:

  • 您需要实现。这将确保同一上下文中的每个人都只能访问数据库对象的实例。这将使访问更容易,因为您将有一个专用于此的对象,而不是主类中的对象
  • 尽管这解决了您的两个问题,但它违反了单一责任原则,并且仍然很难模拟,因为单一实例必须具有私有构造函数,因此它只能被命名构造函数调用一次(不是Java专家,但请看PowerMock,我认为它允许这样做)

  • 另外,您是否在运行时更改json?或者它是只读的

    您试图实现的是一个简单的缓存,一种快速访问数据库的内存表示:

  • 您需要实现。这将确保同一上下文中的每个人都只能访问数据库对象的实例。这将使访问更容易,因为您将有一个专用于此的对象,而不是主类中的对象
  • 尽管这解决了您的两个问题,但它违反了单一责任原则,并且仍然很难模拟,因为单一实例必须具有私有构造函数,因此它只能被命名构造函数调用一次(不是Java专家,但请看PowerMock,我认为它允许这样做)

  • 另外,您是否在运行时更改json?或者它是只读的

    幸运的是,我的json足够只读,但包含数百个需要映射到传入数据的字符串。这样你就不会有缓存验证问题:)我强烈建议你阅读我附加的链接,它甚至有一个数据库的伪代码解释,就像你的一样。实现单例后,只需从主方法调用一次命名构造函数,然后在您需要的每个类中添加对singleton类的引用,并以静态方式访问它。幸运的是,我的json是只读的,但包含数百个需要映射到传入数据的字符串。这样您就不会有缓存验证问题:)我强烈建议您阅读我附加的链接,它甚至有一个数据库的伪代码解释,就像你的一样。实现单例后,只需从Main方法调用一次命名构造函数,然后在每个需要的类中添加对单例类的引用,并以静态方式访问它。