我在Swing中使用Java,并且想知道是否有关于从对话框获取输入的最佳实践。我使用的是MVC架构,我不确定是应该从模型,视图还是控制器来完成。
答案 0 :(得分:1)
我正在使用Java和Swing,并且想知道是否有关于从对话框获取输入的最佳实践。我正在使用MVC架构,我不确定是应该从模型,视图还是控制器来完成。
初看起来,所有3个类(模型,视图和控制器)似乎都可以处理输入。
但是,如果我们考虑每个班级的角色和责任,就不难确定哪个班级是合适的班级。
模型:保存处理数据的数据和方法
查看:用户界面
控制器:模型和视图之间的协调员
用最简单的例子来阐述这个想法;一个程序,它接收一个数字(使用JOptionPane)并显示一条消息,指出它是odd
还是even
(通过JOptionPane)。
模型负责保存数据,以及一些处理数据的方法:
class MyModel
{
private String outcome;
public void checkEvenOdd(int number){
if(number % 2 == 0)
outcome = "even";
else
outcome = "odd";
}
public String getOutcome(){
return outcome;
}
}
毕竟,模型只负责保存数据和逻辑,因此它将把数据留给其他人。
View是用户将与之交互的界面。
class MyView
{
public int promptNumber(){
int num = 0;
String s = JOptionPane.showInputDialog("Enter a number to test whether it is even or odd.");
if(s.matches("\\d+")) //if is numeric
num = Integer.parseInt(s);
else
throw new IllegalArgumentException("Numeric input required.");
return num;
}
public void displayResult(String result){
JOptionPane.showMessageDialog(null, result, "Result", JOptionPane.INFORMATION_MESSAGE);
}
}
视图不会保存数据,也不会执行任何计算或逻辑实现。它仅负责与用户进行 互动 。看到“互动”这个词?是的,我们将获得View类的输入。但是它不会直接将输入传递给Model,因为在MVC中,View和Model不知道彼此的存在。
由于模型和视图不会相互交互,我们需要一个协调器来协调这两个类(模型和视图)。
class MyController
{
private MyModel model;
private MyView view;
public MyController(MyModel model, MyView view){
this.model = model;
this.view = view;
}
public void start(){
int num = view.promptNumber();
model.checkEvenOdd(num);
view.displayResult(model.getOutcome());
}
}
如果给出输入,Controller将要求View与接收输入的用户进行交互。
然后将输入传递给Model进行处理。模型会将处理结果传递回Controller。
Controller最终将结果传递给View以显示给用户。
为了推动这个例子,我们创建了一个实例并运行程序:
class MVCExample
{
public static void main(String[] args){
MyModel model = new MyModel();
MyView view = new MyView();
MyController controller = new MyController(model, view);
controller.start();
}
}
我不确定是应该从模型,视图还是控制器来完成。
如果我们从逻辑上考虑每个类(模型,视图和控制器)的角色和职责,我会说查看将负责接收输入。这也适用于控制台或Swing程序。