【问题标题】:MVC pattern in Java applicationJava 应用程序中的 MVC 模式
【发布时间】:2015-03-06 23:26:42
【问题描述】:

我正在尝试理解 MVC 模式。以前有人问过这个问题,但我还是不明白。

现在我正在开发一个简单的 Swing 多线程程序,它从 DropBox 下载各种 csv 文件,并用这些文件中的数据填充 JTable

我认为 Model 由 DropBoxDownloader 类、FileParser 类、一些实用程序类表示,仅此而已。 View 只是我的框架类。

我对控制器很好奇。它应该做什么? 感觉控制器应该是模型视图的通信协调器,但我不能完全理解。

据说控制器可以很容易地更改视图和模型,而无需更改整个应用程序。我说的对吗?

【问题讨论】:

    标签: java swing design-patterns model-view-controller


    【解决方案1】:

    因为 Swing 使用separable model architecture,讨论了here,所以将应用程序的模型设想为向JTable 视图提供数据的TableModel 实例可能更容易。由于网络访问固有的延迟,您需要从另一个线程更新您的TableModelSwingworker,图解here,是个不错的选择。有关 Swing 控制器的更多信息,请访问here

    【讨论】:

      【解决方案2】:

      我不认为 DropBoxDownloader 或 FileParser 是您模型的一部分。您的模型本质上代表您的数据。你的模型是持久化到数据库的。通常,我的模型由 POJO(plain ole Java Objects)组成,它只是一个带有 getter 和 setter 的属性列表,并且是可序列化的,因此可以通过网络连接以 JSON 或 XML 等通用格式发送。任何能够以通用格式接收此信息的人都可以随意使用它,包括反序列化为不同的编程语言。这就是复杂系统相互通信的方式,在某些情况下,甚至不知道对方的存在。我总是将我的模型保存在一个单独的包中,有时是一个单独的项目,以提高可见性和可重用性。

      您的视图应该能够在没有您的数据的情况下存在。它不会做任何你想让它做的事情,但它应该仍然可以作为一个 shell 操作。它还应该可以用不同的视图替换而不会丢失功能。这意味着您不应该在视图文件中混合数据库查询之类的内容,因为您必须为新视图重写查询。

      您的控制器是整合您的模型并以一种简单的方式将其打包传递给您的视图的粘合剂。一般来说,它对名词(你的模型对象)做动词(方法)。我会考虑 FileParser(假设它按照它所说的那样做)和 DropBoxDownloader 是您控制器的功能。

      【讨论】:

      • 感谢您的回答,但还有另一个问题 - 有很多指南指出模型是业务逻辑,而不仅仅是数据。这是什么意思?
      • 所以,基本上,Model 存储数据,View 代表数据,而 Controller 对这些数据进行处理。我说的对吗?
      • 这基本上是正确的。我通常将业务逻辑保存在控制器函数中,但您可以在模型中使用业务逻辑 - 例如:验证函数、克隆方法或不需要持久化的简单计算值。如果您将业务逻辑放入您的模型中,最好让该逻辑自包含并且不与项目中的其他组件交互。这些交互应该在控制器级别完成。我不会有其他对象的任何实例,除非它们是也是模型一部分的字段属性。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-28
      • 2013-08-23
      • 1970-01-01
      • 2011-08-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多