我想知道这是否不好;让视图了解控制器,这样它就可以委托视图中发生的操作等等,并且让控制器知道视图(这显然是正确的),但是这是双向关系,我想知道是否正确?我希望引用视图中的控制器,因为我希望将所有工作委托给控制器,并保持视图干净。
这是不是很糟糕的设计,如果是这样的话,我还能做什么不同的事情来实现同样的目标?
控制器:
public class Controller {
private View view;
public Controller() {
view = new View(this);
}
public void doSomeButtonAction() {
// More code...
}
}视图:
public class View implements ActionListener {
private Controller controller;
private Button button;
public View(Controller controller) {
this.controller = controller;
// Code for initializing button reference etc.
}
@Override
public void actionPerformed(ActionEvent event) {
controller.doSomeButtonAction();
}
}发布于 2013-02-28 18:43:56
稍后可能派上用场的一件事是删除Controller‘构造函数中的依赖项,将视图作为参数传递或使用setter。
public class Controller {
private View view;
public Controller(View view) {
this.view = view;
}
public void doSomeButtonAction() {
// More code...
}
}这样,您的控制器不负责创建View。你的程序本身。)将负责创建它所需的View实现,并在创建Controller时注入它。这也将有助于测试是否要使用模拟视图或控制器。
您的视图负责用户程序交互。当它接收到某个用户输入时,它需要通知某个控制器,因此您必须有一个对它的引用。然后,View还应该为它的Controller字段设置一个设置器。通过这种方式,您可以构建两者并相互传递给对方。
发布于 2013-02-28 18:47:05
您有一个总体想法:将逻辑( actionPerformed()的实现)放到Controller中。视图将具有可见的小部件,例如,面板中的按钮。在我看来,这并不像"MVC“,而更像是"VC",没有一个数据模型在眼前。
这里没有足够的代码让我称之为“坏”。
发布于 2013-02-28 18:50:35
它不是MVC设计,MVC应该将模型、视图和控制器分层,以获得设计模式的好处。
看起来您正在使用JSF,所以您的View和Controller类实际上都是JSF中视图层的一部分。最好将它们重命名为PageAction、ViewFinder、ViewFrontController等。
https://stackoverflow.com/questions/15143146
复制相似问题