客户端-服务器应用程序是否需要使用MVC架构?

3

我目前正在为大学的Java小组项目工作。任务是制作一个基于零配置的分布式系统。我们的小组决定开发一个会议聊天应用程序,采用客户端-服务器架构。由于我加入小组比较晚,大部分代码已经完成,并且他们已经决定为该项目开发MVC架构。我自己在Rails开发中有MVC的经验,并且可以欣赏它在那个环境下的便利性。然而,我看不出使用它的方式对我的小组有什么好处。

有两个类分别为Client和Server,每个类都包含发送和接收数据报的方法以及一些字段,例如套接字以实现发送功能。还有ServerController和ClientController类。这些类中的每个类都只包含一个字段(一个Server和一个Client),并且所有方法都是Server或Client的公共方法的包装器或简单的实用方法。例如:

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

在我看来,这似乎完全没有意义,在这种情况下,MVC只是为了使用设计模式而被实现。有人能告诉我以这种方式编写应用程序是否有任何好处吗?这些控制器类到底有没有必要?

3个回答

2
MVC的目的是提供抽象,使后续更改更容易实现,并解耦您的组件。这也许就是为什么你现在认为它没有意义的原因...因为你的应用程序很小而简单。如果它将保持这种状态,那么MVC可能只会给你的应用程序增加负担。但是如果它将会增长,MVC可能有助于未来的开发。
考虑一些情况,这些情况可能说明为什么您想要使用MVC或实现让模型和视图直接访问彼此,而不需要控制器。
- 如果您需要在“关闭服务器”时执行与您的服务器类无关的其他操作,该怎么办?你会在哪里做这个? - 如果您想将服务器实现更改为第三方包,您会更改控制器代码还是更改所有视图中的特定实现代码? - 如果您更改了用于存储应用程序数据的数据库,您是否希望您的UI开发人员担心更改前端代码以适应此更改?
通过使用MVC,以上所有情况都可以得到缓解,这将为您提供必要的关注点分离和抽象,从而使开发和改进/更改代码更加容易。

除了在关闭服务器时关闭套接字,我还需要做什么?由于这只是一项大学作业,我怀疑我将来不会想将我的服务器更改为可重用的包,如果真的需要,我会自己从头开始实现一个简单的。 - Richard Stokes
@RichardStokes 假设你在服务器运行时将用户数据存储在内存中。如果你想添加一个持久化用户状态的功能,你需要在关闭应用程序之前将数据保存到数据库中。因此,在你的控制器的 closeDownServer 中,你可以调用数据库对象的 persistUserData() 方法来实现这一点。在你的特定情况下,MVC 看起来只是多余的代码,但当它有用时,它是很好的。 - Bryan
谢谢,这是一篇非常详细的解释,帮助我澄清了对 MVC 的理解,已经看到了控制器在应用程序中会有用的一些领域 :) - Richard Stokes

1

由于描述如此深入,很难确定MVC模式是否真正适用于您的设计。

但我可以说:有一个比MVC模式更重要的模式——简单性模式:如果您代码中的某些部分完全无用且没有作用,请将其删除!没有必要仅因为某个权威人士曾经这样说过而保留某个类。

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


1

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接