Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不确定是否使用MVC设计模式_Java_Model View Controller - Fatal编程技术网

Java 不确定是否使用MVC设计模式

Java 不确定是否使用MVC设计模式,java,model-view-controller,Java,Model View Controller,我试图在我的项目中使用MVC设计模式,但我有点不确定如何将我的程序解耦到类中。我的程序的第一部分是一个登录屏幕,要求用户输入他们的用户名和密码,以及一个检查详细信息的开始按钮,还有一个按钮可以转到可以添加新用户的页面。所以我在考虑我的MVC设计: loginpanelView:只有带有文本框、标签、按钮等的GUI loginpanelController: -在这里实现启动按钮的actionlistener,并引用checkLogin方法 -在此处实现actionlistener for add

我试图在我的项目中使用MVC设计模式,但我有点不确定如何将我的程序解耦到类中。我的程序的第一部分是一个登录屏幕,要求用户输入他们的用户名和密码,以及一个检查详细信息的开始按钮,还有一个按钮可以转到可以添加新用户的页面。所以我在考虑我的MVC设计:

loginpanelView:只有带有文本框、标签、按钮等的GUI

loginpanelController: -在这里实现启动按钮的actionlistener,并引用checkLogin方法 -在此处实现actionlistener for add user按钮,并引用切换面板的方法

登录模型: -定义检查登录的实际方法

开关面板型号: -定义创建cardlayout系统并切换面板的方法

我的理解是,控制器只是对需要做的事情做了非常一般的参考,即用户希望发生的事情,然后模型定义了如何处理这些事情的确切方法?有人介意验证/纠正我的理解吗?我已经读了很多关于这个设计模式的文章,但不幸的是,我仍然觉得我对它没有一个清晰的理解。任何帮助都将不胜感激

p、 对不起!我忘了说我是用Java编程的,有这样一个基本的“功能设计”,很难准确地帮助您,但是您可能需要更多地考虑您想要什么

  • 用户模型-用户的数据库模型。包含“检查登录” 方法
  • 登录页面视图-表单、布局等
  • 登录控制器-从表单中获取内容,尝试使用用户对象中的方法登录某人,并创建所述用户 反对

当然,页面视图/控制器可以分为几个子部分,但这可能是一个不错的起点。

在我看来,LoginModel和SwitchPaneModel根本不是模型。模型就是你储存在某处的东西。因此,您将拥有UserModel和PaneModel。您的控制器将实现switchPane方法和login方法。在一些单独的类中解耦这个方法是个好主意。有很多方法可以执行这个任务。但我强烈建议您找到现成的解决方案。不要发明自行车。

从依赖性的角度考虑MVC有时会有所帮助

模型反映了应用程序的功能。它对任何东西都没有依赖性。这是使您的应用程序独特的原因

该视图向用户显示信息。此信息来自模型。因此,视图依赖于模型

控制器的功能是接受用户的输入,将该请求分派到适当的模型功能,并且(通常)接受返回值并将其提供给要渲染的视图。因此,控制器通常与它所服务的视图紧密耦合。它还依赖于模型

在本例中,模型是您的身份验证方案。(实际上,这并不是模型的全部内容,而是应用程序中的一个入口点,您的整体模型类似于“处理付款”、“生成报告”、“请求创建小部件”等。)

您有两个视图,一个用于输入身份验证信息,另一个用于显示身份验证成功的时间。第一个确实没有任何模型信息,它只是收集输入(但是它的设计将基于身份验证模型需要的任何东西,因此这里仍然存在依赖性)。第二个无疑将显示应用程序提供的可用功能列表或显示登录页等

控制者有责任调解这些互动。因此,控制器接收从第一个视图发送的信息,并将其发送到身份验证模型,身份验证成功或失败,然后控制器根据结果选择适当的视图进行渲染。

一个好的起点是。这是MVC的一个特例,称为被动视图。第一个重要的想法是视图和模型根本不相互通信。视图仅向控制器告知事件,控制器同时操纵视图和模型。控制器甚至可以创建新的控制器和视图(例如复杂模式对话框)。最后,模型不与任何人通信

因此,您的想法是正确的:您的loginpanelController侦听loginpanelView中的按钮事件,然后在模型中调用正确的方法来设置数据并验证它

我想有一个地方你可能会有问题,那就是switchpanelModel。我想你不需要这个。如果您的loginpanelView是其中包含卡的视图,那么您的loginpanelController应该是切换卡的视图


我认为模型应该局限于使用自己的数据的方法,但不能在任何地方引用任何GUI元素。模型不驱动程序;控制器是这样做的。

与其从“定义”方法的角度思考问题,不如从正在发生的事情的角度思考问题


例如,在MVC中,一个视图主要封装程序的用户界面(登录表单),一个模型封装部分域逻辑(密码验证),一个控制器封装连接视图和模型的逻辑(这取决于MVC体系结构的变化)。控制器通常在某种程度上与视图相耦合(特别是如果您开始添加明显特定的ActionListener等),但是模型应该是可重用/可交换的(更改验证方式并不意味着您必须更改使用它的任何视图/控制器)

我可能会帮助您添加一种语言来编写它,因为使用过这种语言的人可以