我正在设计一个UI应用程序,也涉及到使用数据库。我明白我应该将数据库-逻辑- ui层彼此分开。
但是我不明白我应该从哪一层调用main函数,以及我应该从哪一层处理线程池。
到目前为止,我试图做的是将main函数和线程池放在逻辑包中(在一个称为mainAppClass的类中),并从那里启动UI类的实例(不在不同的线程上)。
当UI层想要打开一个新线程时,它将使用mainAppClass中的线程池。
当我尝试这个我得到org.eclipse.swt.SWTException:无效的线程访问我理解(从以前的堆栈流问题),我得到这个错误,因为UI线程只能从"主UI线程"运行。
但我的应用程序中的主UI线程是什么?
基本上我的问题是:
应该把main函数放在哪里?(哪个包UI或逻辑)
如果在逻辑包中,那么我应该在不同的线程中实例化UI吗?
还可以链接到一个包含所有三个不同层的应用程序的简短示例。
谢谢
你的主类应该在UI包中。
我不知道SWT,但通常你有一个单一的GUI线程,从它的声音你试图在一个单独的线程上运行UI代码(因此例外)。从本质上讲,你不应该有一个线程池来运行UI代码(或者至少我想不出你为什么需要一个线程池)。
然而,你也没有发布任何你想要完成的细节,所以很难知道该推荐什么。但一般来说,你会使用线程池来避免锁定UI线程(因此它将存在于UI包中)。
关于线程的详细信息,我将查看以下内容。它有一个与Swing相关的线程示例,可以帮助您更好地理解线程和GUI之间的关系。 https://www.udemy.com/java-multithreading/你也可以考虑看看下面这本书。它侧重于测试,但是它有一个示例GUI应用程序,它提供了一个很好的关注点分离示例(不幸的是它也使用了Swing)。至少,示例代码可以在网站上查看。
http://www.growing-object-oriented-software.com/通过'database-logic-ui',我假设您大致参考了3层架构。考虑前两层与UI之间关系的最佳方式是,用基于web或基于控制台的界面取代UI需要什么?
作为一条非常粗略的经验法则,对于每种不同的表示方法(db代码、业务逻辑等),任何代码都不改变,都应该位于前两层。由于main方法对于每种类型的表示层都是不同的,所以它应该驻留在UI包中。
看起来你的逻辑和物理设计也很混乱。《Java应用体系结构:使用OSGi的模块化模式示例》一书很好地概述了它们之间的区别,并使代码的不同部分应该放在哪里变得更清晰。
对不起,我不能提供更多的帮助,但希望这足以让你开始。好运!