gpt4 book ai didi

java - 将 MVC 模式应用于现有应用程序

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:56:56 24 4
gpt4 key购买 nike

这是对 The MVC pattern and SWING 的后续问题.我正在尝试在现有代码段中实现 MVC 模式。现有代码创建了一个同时充当 View 和 Controller 的 JFrame。 JFrame 有一个表,表的模型是自定义数据模型的适配器。每当用户执行操作时,模型都会通过执行以下操作来更新:

CustomDataTableModel cdtm = (CustomDataTableModel) DataTable.getModel();
CustomDataModel cdm = cdtm.getModel();
cdm.delete(1);

我试图想象它目前是如何工作的,但我也想象了我与 future Controller 和模型的关系应该如何想象。

MVC

现在,我的问题很简单,我是否可以继续使用现在的模型?我能否实现以下内容并仍然“坚持”MVC 模式?

  1. 用户选择表格中的一个元素,然后点击删除按钮。
  2. View 将操作委托(delegate)给 Controller 。
  3. Controller 通过 View 上的访问器访问表,并执行更新。
  4. 模型在更新时通知 JTable 它已被更改。

如果 View 中的任何其他组件显示表中的数据,那么这可以通过在 JTable 的表模型上注册监听器来解决。

更新 1

我一直在根据 MVC 模式考虑现有代码,并且我已经重新绘制了一些关系。关键是 Controller 是 View 的行为,因此 Controller 会在用户执行操作时更新模型,而 View 会监听模型的变化。但是,MVC 模式中没有任何内容可以阻止 View 通过表模型监听模型 - 对吗?

MVC

现在,用户单击添加按钮。 View 通知 Controller 已单击添加按钮, Controller 负责通过调用模型上的某些方法来创建新项目。该 View 被注册为模型的监听器(通过表模型)并更新其 View 。 Controller 也可以是模型的监听器,以防它需要处理禁用或锁定字段的问题。我没有达到 MVC 的目的吗?关注点分离?据我所知,我什至引入了适配器模式来进一步将 View 与模型分离?已经很晚了,我累了,所以这可能就是为什么它有意义:-)

最佳答案

一般来说,我会给你以下建议:

  • 看看JGoodies Binding ,它不是 MVC,而是使用“PresentationModel” 模式在我看来,这更好适应整个应用程序比MVC(我觉得适合仅限单个小部件)。这应该解决你们之间的问题Domanin 模型和 TableModel
  • 如果您的应用程序只有表格,然后 GlazedLists也使一个很多意义:它也会隔离你的域模型来自你的TableModel(但它不强制执行任何全局模式、MVC 或 PM)

关于您展示的当前设计,我宁愿建议 ViewController 请求 ActionView 将分配给删除按钮。然后 Controller 可以作用于 Domain Model

关于java - 将 MVC 模式应用于现有应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258653/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com