Java 应用程序中的 MVC 模式
MVC pattern in Java application
我正在尝试了解 MVC 模式。这个问题以前有人问过回答过,但是还是没看懂
现在我正在开发一个简单的 Swing 多线程程序,它从 DropBox 下载各种 csv 文件并用这些文件中的数据填充 JTable
。
我认为模型由 DropBoxDownloader
class、FileParser
class、一些实用程序 classes 表示,仅此而已。
视图只是我的框架 classes.
我对Controller很好奇。它应该做什么?
感觉controller应该是Model View的通信协调器,但是完全看不懂
据说控制器可以轻松更改视图和模型,而无需更改整个应用程序。我说得对吗?
我不认为 DropBoxDownloader 或 FileParser 是您模型的一部分。您的模型本质上代表您的数据。您的模型是持久保存到数据库中的。通常,我的模型由 POJO(普通 ole Java 对象)组成,它只是具有 getter 和 setter 的属性列表,并且是可序列化的,因此可以通过网络连接以 JSON 或 XML。任何可以以通用格式接收此信息的人都可以随意使用它,包括反序列化为不同的编程语言。这就是复杂系统相互通信的方式,在某些情况下,甚至不知道对方的存在。我总是将我的模型保存在一个单独的包中,有时还保存在一个单独的项目中,以提高可见性和可重用性。
您的视图应该能够在没有您的数据的情况下存在。它不会做你想让它做的所有事情,但它仍然应该作为 shell 最低限度地可操作。它也应该可以在不损失功能的情况下替换为不同的视图。这意味着您不应该在视图文件中混合数据库查询之类的东西,因为您必须为新视图重写查询。
您的控制器是集成您的模型并以一种简单的方式将其打包以传递给您的视图的粘合剂。通常,它会将动词(方法)转换为名词(您的模型对象)。我会考虑将 FileParser(假设它按照它说的做)和 DropBoxDownloader 作为您控制器的功能。
因为 Swing 使用 separable model architecture, discussed here, it may be easier to conceive of your application's model as an instance of the TableModel
that supplies data to your JTable
view. Because of the latency inherent in network access, you'll want to update your TableModel
from another thread; Swingworker
, illustrated here, is a good choice. More on Swing controllers may be found here.
我正在尝试了解 MVC 模式。这个问题以前有人问过回答过,但是还是没看懂
现在我正在开发一个简单的 Swing 多线程程序,它从 DropBox 下载各种 csv 文件并用这些文件中的数据填充 JTable
。
我认为模型由 DropBoxDownloader
class、FileParser
class、一些实用程序 classes 表示,仅此而已。
视图只是我的框架 classes.
我对Controller很好奇。它应该做什么? 感觉controller应该是Model View的通信协调器,但是完全看不懂
据说控制器可以轻松更改视图和模型,而无需更改整个应用程序。我说得对吗?
我不认为 DropBoxDownloader 或 FileParser 是您模型的一部分。您的模型本质上代表您的数据。您的模型是持久保存到数据库中的。通常,我的模型由 POJO(普通 ole Java 对象)组成,它只是具有 getter 和 setter 的属性列表,并且是可序列化的,因此可以通过网络连接以 JSON 或 XML。任何可以以通用格式接收此信息的人都可以随意使用它,包括反序列化为不同的编程语言。这就是复杂系统相互通信的方式,在某些情况下,甚至不知道对方的存在。我总是将我的模型保存在一个单独的包中,有时还保存在一个单独的项目中,以提高可见性和可重用性。
您的视图应该能够在没有您的数据的情况下存在。它不会做你想让它做的所有事情,但它仍然应该作为 shell 最低限度地可操作。它也应该可以在不损失功能的情况下替换为不同的视图。这意味着您不应该在视图文件中混合数据库查询之类的东西,因为您必须为新视图重写查询。
您的控制器是集成您的模型并以一种简单的方式将其打包以传递给您的视图的粘合剂。通常,它会将动词(方法)转换为名词(您的模型对象)。我会考虑将 FileParser(假设它按照它说的做)和 DropBoxDownloader 作为您控制器的功能。
因为 Swing 使用 separable model architecture, discussed here, it may be easier to conceive of your application's model as an instance of the TableModel
that supplies data to your JTable
view. Because of the latency inherent in network access, you'll want to update your TableModel
from another thread; Swingworker
, illustrated here, is a good choice. More on Swing controllers may be found here.