【发布时间】:2013-02-28 18:40:13
【问题描述】:
我想知道这是否不好;让视图了解控制器,以便它可以委托视图中发生的操作等,并让控制器了解视图(这显然是正确的),但是我想知道这是双向关系是否正确?我想在视图中引用控制器,因为我想将所有工作委托给控制器并保持视图清洁。
这是糟糕的设计吗?如果是这样,我可以做些什么不同的事情并仍然达到相同的效果?
控制器:
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();
}
}
【问题讨论】:
-
这看起来和它应该的完全一样。视图如何不知道控制器?
-
您可以通过控制器中的“视图”引用开始访问“getters”,然后在控制器中附加事件侦听器等。那么视图现在需要有一个参考。所以,是的,视图可以在不知道控制器的情况下存在。
-
它是可重用的组件吗?视图在编译时定义其按钮的实际作用并没有本质上的“坏”,而不仅仅是它们存在并在运行时等待从其他人那里学习它们的作用。 “此按钮保存该行数据”是有效的视图级别规范。 “这个按钮存在并且如果有人注册一个监听器可能会做一些事情”没有那么有用:)。为了它而添加另一层抽象只会使其他所有内容变得更加难以阅读!
标签: java model-view-controller