【问题标题】:Is MVC necessary for a client-server application?客户端-服务器应用程序是否需要 MVC?
【发布时间】:2011-11-09 12:13:09
【问题描述】:

目前正在为 Java 大学做一个小组项目。任务是产生一个基于零配置的分布式系统。我们小组决定开发一个会议聊天应用程序,使用客户端-服务器架构。由于我加入小组较晚,大部分代码已经完成,他们决定为该项目开发一个 MVC 架构。我通过 Rails 开发体验了 MVC,并且可以理解它在这种情况下的方便程度。但是,我看不到像我的团队那样使用它的好处。

Client 和 Server 有两个类,每个类都包含发送和接收数据报的方法,以及启用发送的套接字等字段。还有 ServerController 和 ClientController 类。这些类中的每一个仅包含一个字段(分别为服务器和客户端),并且所有方法要么是服务器或客户端的公共方法的包装器,要么是简单的实用程序方法。一个例子是:

public void closeDownServer(){
    server.closeDownServer();
}

对我来说,这似乎完全没有意义,在这种情况下,MVC 的实现只是为了使用设计模式。谁能告诉我以这种方式编码应用程序是否有任何好处?是否需要这些控制器类?

【问题讨论】:

    标签: java model-view-controller client-server


    【解决方案1】:

    MVC 的目的是提供抽象,使以后的更改更容易实现,并解耦您的组件。这可能就是您现在认为它毫无意义的原因......因为您的应用程序小而简单。如果它会保持这种状态,那么 MVC 可能只是被添加到您的应用程序中。但如果它要发展,MVC 可能对未来的发展有所帮助。

    考虑一些可能说明您为什么要使用 MVC 或让模型和视图无需控制器直接相互访问的实现的案例。

    • 如果在“关闭
      与您的服务器类无关的“服务器”?在哪里 你会这样做吗?
    • 如果您想将服务器实现更改为第三方包怎么办?您愿意更改控制器代码还是更改 在您的所有视图中实现特定代码?
    • 如果更改用于存储应用程序数据的数据库会怎样?您是否希望您的 UI 开发人员担心更改代码 前端来适应这个?

    所有上述情况都可以通过使用 MVC 得到缓解,这将使您能够适当地分离关注点和抽象,以便更轻松地开发和改进/更改代码。

    【讨论】:

    • 关闭服务器时除了关闭套接字还需要做什么?由于这只是一项大学作业,我怀疑我是否会想在未来将我的服务器更改为可重用的包,如果是这样,我会自己从头开始实现一个简单的。
    • @RichardStokes 假设您在服务器运行时将用户数据存储在内存中。如果您想添加一项功能来保持用户状态,则需要在关闭应用程序之前将该数据保存到数据库中。因此,在您的控制器中的 closeDownServer 中,您可以调用数据库对象 persistUserData(),它会执行此操作。在您的具体情况下,听起来 MVC 只是不需要的额外代码,但很高兴看到它何时有用。
    • 谢谢,这是一个非常彻底的解释,帮助我理清了对 MVC 的理解,已经看到了这个应用程序中的某些领域,控制器会很有用:)
    【解决方案2】:

    有了这么深的描述,就不可能说 MVC 模式对你的设计是否真的有效。

    但我可以这样说:有一种模式比 MVC 模式更重要的模式——简单模式:如果你的代码中的某些东西完全无用并且什么都不做,那就摆脱它!仅仅因为某些权威曾经这样说过,所以上课是没有意义的。

    在实现 MVC 模型时,我经常看到控制器与视图相结合,尤其是当应用程序很简单时。所以你不是唯一一个提出这个问题的人。稍后,如果出现需求(例如多个不同的视图),您可以分离控制器。

    【讨论】:

      【解决方案3】:

      控制器意味着您可以更改视图绑定到模型的行为(即,控制器将用户输入转换为模型)。在这种情况下,我会说通常不需要控制器,因为您将来不需要更改此行为。

      在开发游戏并且我需要实现 MVC 时,我通常也会省略控制器(它与视图相结合)。

      【讨论】:

        猜你喜欢
        • 2015-11-24
        • 2021-01-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多