Java命令行中的MVC模式

16

我正在尝试在我的命令行项目中使用MVC。

目前为止(显然,没有MVC),我有:

  • MainClass(假名字),使用菜单几次后创建一个System对象
  • Menu(被Main用于呈现选项)
  • System,它有一个Model作为属性,通过文件或键盘输入创建,它使用来自Model的数据执行简单的操作.calculate(valueA,valueB),其中valueA和valueB是从模型的属性数组中使用Menu选择的
  • Model(有点像)是我拥有的数据的容器。

请问有人能给我建议一个适当的类结构吗?

非常感谢, Luke


任何帮助都将不胜感激。 目前我没有期限,重写代码对我来说不是问题。 - Luke Morgan
1
@Luke 我能看到人们在这里的困惑。当你在处理命令行接口时,MVC互动并没有太多可做之处。你的视图已经被抽象化了(它是你用来运行程序的系统控制台)。你的控制器只是作为模型和视图之间的中介。在你典型的初学者CLI程序中,这通常就是 System.out.println。因此,你几乎所有要做的就是解析 System.in 并打印到 System.out。这并不意味着没有可以学习的课程。 - corsiKa
2
如果你想从中学到一些东西,我向你发起挑战:重构代码,使得其他人可以尽可能少地调用“逻辑类”中的方法来创建自己的命令行界面。在理想状态下,它只需调用一次逻辑类,获取结果并进行格式化。如果你能做到这一点,那么你就有了一个很好的模型,可以轻松升级为GUI。事实上,我经常先为我的模型编写CLI,然后再转向GUI,唯一的目的是确保它们都是分离的。 - corsiKa
3
这个问题本来不应该被关闭。我投票支持重新开放。 - Ryan Stewart
关闭者/投反对票的人:仅仅因为你不理解某个东西并不意味着它是不好的。我投了重新开放的票。 - Neil McGuigan
显示剩余5条评论
1个回答

18

我对这个问题的负面反应感到非常惊讶,因为它是一个相当有趣的问题。我认为这是因为大多数人认为MVC仅在Web环境下才有意义,但MVC完全适用于CLI程序。它只是呈现了不同的视图媒介。实际上,我认为这是能够在CLI、GUI或Web“视图”中插入而无需更改控制器和模型部分的最优秀的MVC设计。

MVC所表达的就是,在给定一个应用程序时,您需要尽可能地将视图部分——应用程序的展示和用户看到和交互的部分——与应用程序的真实内部逻辑分离。您可以通过创建控制器来完成这一点,控制器将视图和其中存在的任何控件与后端逻辑“粘合”在一起。简单来说,控制器将用户输入转换成方法调用,并将返回值转换回对用户有用的内容。模型部分的模式有些争议。有人说,每个单独的对象图块都是发送到视图以进行显示的“模型”。其他人则认为,生活在后端的整个有状态对象图是“模型”,而控制器形成了一个望远镜,让视图挑选、检查和修改特定的模型部分。问题在于是否有许多模型不断流动,还是需要以用户可以理解的方式公开一个大型模型。

要在CLI或任何类型的应用程序中实现MVC,需要定义一个清晰的代码部分作为视图/展示部分。它永远不应该包含任何与业务逻辑类似的内容。你的控制器应该是知道如何响应用户输入并可以发送回以供查看的对象,但不能假定这些对象将以何种形式显示或以何种形式输入。模型,无论是哪一种,基本上都是用户关心的实际数据或“东西”,它应该对显示它的视图或控制它的控制器毫不知情。


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