0

我一直在关注 Oracle 在本文中提出的修改后的模型视图控制器示例。使用 MVC 的 Java SE 应用程序设计

在此示例中,DefaultController 类声明属性名称字符串,如下所示:

public static final String ELEMENT_TEXT_PROPERTY = "Text";

这些字符串在多个地方使用。

在控制器中:

AbstractController 使用反射在其模型中搜索名为 set+propertyName 的方法。

在模型中:

该模型具有调用此方法的 setter 方法:

firePropertyChange(Controller.NAME_PROPERTY, oldName, name);  

在视图中:

在 modelPropertyChange 方法中,

if(evt.getPropertyName().equals(Controller.NAME_PROPERTY)

我关心的部分是模型引用了控制器的静态字段。我仍在尝试掌握 MVC,但我不确定此架构是否实现了 MVC 用于所需的解耦。所有三个类都引用控制器的静态字段是否重要?

编辑: 本教程中描述的架构(如编码)是否是 MVC 的无效表示?如果是这样,是否可以对其进行更改,以使模型/(模型层)不依赖于 DefaultController 类中定义的静态属性名称?

我意识到这篇文章“只是一个教程”,但是如果其中提供的代码没有反映所声称的解耦,我认为社区应该停止将它作为 MVC 的示例来引用。

4

1 回答 1

1

我不是 Java(甚至不是桌面应用程序)开发人员,所以对这一切持保留态度。

首先,static任何代码中的字段都代表一个全局状态,这完全违背了面向对象代码中的任何做法。

至于你的担心,教程中的代码违反了 SoC,你是对的。但话又说回来,它的目的是作为一个基本教程,而不是太高级的东西。目标是展示 MVC 三元组的各个部分,并至少对它们如何交互以及主要职责是什么进行表面理解。它并不意味着在生产代码中复制粘贴。

一旦清楚的迹象表明,此代码中存在一个“模型对象”。在现实世界中,情况模型将是一个层。

如果你想对 MVC 有更广泛的了解,我可以推荐三本阅读材料:

于 2012-08-01T00:54:57.593 回答