我对模型视图控制器有疑问。
我对View和控制器如何相互通信感到困惑。
我有一个视图类,它接受一个模型实例:
View v = new View(model);
我在View类中也有一个actionListener字段,在该构造函数中我传入一个模型和当前类的实例(视图):
private ActionListener listener;
.
.
.
listener = new Controller(model,this);
现在在我的控制器类中,我扩展了ActionListener并传入了模型和视图类:
public class Controller implements ActionListener{
public Controller(model m, View v){
.
.
.
现在我的问题是,你能在模型视图控制器的控制器类的构造函数中传递一个视图类吗?我在视图中传递的原因是我有时想要关闭视图窗口或者想要从文本字段传递值。有时我也想从视图类调用一个方法。这是做MVC的正确方法吗?
由于
答案 0 :(得分:0)
您可以向5个不同的人询问如何实施MVC,您将得到5个不同的答案。有很多不同的方法可以做到这一点。我会阅读更多关于MVC和其他设计模式,如MVP。 Martin Fowler在GUI patterns上有一些很棒的文章。还有this article有很好的信息。
回答你的问题。知道视图的控制器没有任何问题。控制器是应该处理用户输入的控制器(否则你可以考虑MVP)。我会创建一个接口,只让控制器知道视图的接口。所以创建类似IView的东西,让你的视图实现这个界面。这样你就没有紧密耦合的视图和控制器,你可以做一些事情,比如创建一个模拟视图进行测试。