java - Oracle 修改后的 MVC 示例中的静态属性值是否破坏了预期的解耦?

标签 java model-view-controller properties static decoupling

我一直在关注 Oracle 在本文中提供的修改后的 Model View Controller 示例。 Java SE Application Design with MVC

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

public static final String ELEMENT_TEXT_PROPERTY = "Text";

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

在 Controller 中:

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

在模型中:

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

firePropertyChange(Controller.NAME_PROPERTY, oldName, name);  

在 View 中:

在 modelPropertyChange 方法中,

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

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

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

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

最佳答案

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

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

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

一旦明确的迹象就是,这段代码中存在一个“模型对象”。在现实世界中,模型将是一个层。

如果你想更广泛地了解MVC,我可以推荐三本阅读 Material :

关于java - Oracle 修改后的 MVC 示例中的静态属性值是否破坏了预期的解耦?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11750324/

相关文章:

java - 不同的数据库系统实现(例如 MySQL 和 Microsoft SQL Server)对 `DataSource` 和 `DriverManager` 的影响是否不同?

java - 如何使用 ExecutorService 等待所有线程完成?

java - 如何为猜字游戏实现 MVC 模式?

python - python 的日期时间模块中缺少属性

Python - 像扩展函数一样扩展属性

java - 当 .class 不在默认包中时 FindClass 返回 null

java - 如何在 Java EE 中获取当前 Web 应用程序的名称?

c# - 模拟 protected 方法

iphone - 在不使用 Interface Builder 的情况下以编程方式执行所有操作时如何实现可重用代码?

python - 动态向类添加属性