【问题标题】:MVC and Java in comparison with more strict MVC languagesMVC 和 Java 与更严格的 MVC 语言的比较
【发布时间】:2010-10-14 16:36:42
【问题描述】:

有人告诉我,Java 不是遵循 MVC 架构的最佳选择。我相信我已经看到了一些 Java 框架解决方案来缓解这个障碍。但是,我有点困惑为什么会这样。更具体地说,为什么 Java 在 MVC 上的尝试经常被嘲笑为一种“想要的”方法。我来自 ObjC 背景(当然是 Cocoa),我很想听听经验丰富的程序员为什么说 MVC with Java 不足。

欣赏!

【问题讨论】:

    标签: java cocoa model-view-controller


    【解决方案1】:

    你说你来自 Cocoa 背景,所以我假设你不是在谈论 Web 框架 MVC。大多数声称他们使用 MVC 的 web 框架实际上都使用了一种称为 Front Controller 的不同模式,这与普通的 MVC 有点不同,因为您需要大量的管道才能使其工作。因此,Web 世界中的所有 MVC 框架,最初 MVC 是基于窗口的应用程序的模式。对于这些应用程序,您无需框架即可使 MVC 工作。

    MVC 是一种可以用任何面向对象语言实现的模式。没有理由不能在 Java 中做到这一点。我能想到人们为什么将 Java 上的 MVC 称为“想要的”方法的唯一原因是,Java 上的 UI 库(如 Swing)实际上并不需要您执行 MVC。他们只是为您提供实现视图的工具。您必须自己创建控制器和模型类。

    无论如何,关于什么是“真正的 MVC”的讨论通常并不具有建设性。 MVC 是大约 30 年前为 smaltalk 开发的一种模式。现在使用的实现不再完全相同,许多实现都是改进。你有不同的风格,称为 MVP、MVVM、Document-View 等。它们在某些情况下都很有用。重要的是,将 UI 逻辑与应用程序逻辑分开是一个好主意。 Java 可以做到这一点,大多数其他语言也可以。声称不这样的人可能只是害怕看到他们熟悉的语言之外的东西。

    【讨论】:

    • Java 的 UI 框架是 AWT 和 Swing。春天完全不同。
    • 糟糕。我的意思是秋千,不是弹簧。已修复,感谢您的关注!
    【解决方案2】:

    从根本上说,MVC 是一种编程模型。我认为它与平台和语言无关。我曾经在 C++ 中遵循 MVC 原则,所以我不确定为什么任何语言在遵循这些原则方面都会被视为“不足”。诚然,这些天我是一个 .NET 人,但我认为只要稍加努力,它们就可以应用于 Java。请参阅Java Model-View Controller 了解一些想法。

    【讨论】:

      【解决方案3】:

      很想听听资深人士的意见 程序员关于为什么使用 Java 的 MVC 是 说是功亏一篑。

      它没有。用几乎任何语言实现 MVC 绝对没有错。这是一种模式,而不是语言特征。此外,我以前从未听过任何人说“Java 中的 MVC 不足”——我的猜测是,这句话要么是断章取义,要么是发表该声明的人对 Java 缺乏经验或有其他意图。

      必须使用 Cocoa 中与 MVC 相关的类来编写 Cocoa 应用程序。很高兴它们在那里,并且工具(如 Interface Builder)中提供了各种强大的支持来使用它们,而且您可能不会使用它们的情况很少,但是对于 Objective-C 语言来说,没有什么基础可以使 MVC 实现比用 Java 编码的 MVC 实现“更好”。此外,正如 Cocoa 框架通过各种 Controller 和 View 类为 MVC 提供各种强大的支持一样,也有许多优秀的 Java 框架为实现 MVC 提供支持。

      【讨论】:

        【解决方案4】:

        我觉得 MVC 模式作为动态的、数据驱动的 Web 应用程序的框架似乎确实需要更少的冗长,因此使用 Python 和 Ruby 等动态语言的代码更少,这是一件好事。

        动态语言可以很容易地避免 M、V 和 C 之间的依赖关系,这是该模式的目的之一。例如,在 Python 中,您可以将模型对象传递给视图,而视图不需要依赖模型类型,它只关心传入具有相同属性的任何类型。一旦您开始在视图中使用模板语言,就像在 Django 中一样,当属性不存在时,它甚至不会导致脚本错误。

        为了避免强类型语言中的这些依赖性,您通常会开始传递以文字字符串作为键的字典,这意味着强类型语言的大部分优点都丢失了(即,您的编译器不会告诉您命名键“person”,然后尝试使用关键“persons”找到它,这将在运行时发现)

        此外,鉴于 MVC 模式通过允许单独测试 M、V 和 C 来进行测试,因此使用强类型编译语言的优势较小,因为测试可用于验证您的应用程序是否正常工作.

        【讨论】:

        • 我认为问题是关于 MVC,模块化 GUI 编程风格,而不是 MVC,分层 Web 架构。完全不同的东西
        • 是的,看起来是这样。提醒自己,更仔细地阅读问题。
        • 它们仍然不是完全不同的东西,它仍然是相同的模式。我认为这个答案仍然有效,因为我觉得它确实为讨论增加了价值,并且我确实指定我正在谈论 Web 实现中的 MVC。
        • 是的,但我知道你要来的地方,不过,不胜感激!
        猜你喜欢
        • 2011-02-10
        • 2011-09-19
        • 2013-07-20
        • 2014-10-17
        • 1970-01-01
        • 2013-03-11
        • 2022-01-07
        • 2012-02-22
        • 2021-05-16
        相关资源
        最近更新 更多