我需要该视图来持有对控制器的引用,因为它需要将控制器注册为事件侦听器。 我需要控制器来保存对视图的引用,因为按下按钮后,我需要能够在列表中获取选定的文件。 (我有文件的列表,以及一个按钮“添加组”,所以当点击按钮时,我需要得到所选文件)MVC - 循环依赖
因此,在短期我:
Controller controller(view);
View view(controller);
我敢肯定,这里有一些不好的设计,我只是无法弄清楚如何避免它..
我需要该视图来持有对控制器的引用,因为它需要将控制器注册为事件侦听器。 我需要控制器来保存对视图的引用,因为按下按钮后,我需要能够在列表中获取选定的文件。 (我有文件的列表,以及一个按钮“添加组”,所以当点击按钮时,我需要得到所选文件)MVC - 循环依赖
因此,在短期我:
Controller controller(view);
View view(controller);
我敢肯定,这里有一些不好的设计,我只是无法弄清楚如何避免它..
一个可能的解决方案:
addView(View view)
方法addController(Controller controller)
方法。谢谢。我想到了它,但不确定它是否正确。 – Shmoopy
我很确定视图不应该依赖于MVC模式上的Controller:它只能依赖于模型 –
您建议视图应该有一个对Controller的引用:这是一个依赖关系 –
那么,我相信你可以使用封装,也懒惰的初始化过程。我相信,当控制器初始化时,您不需要视图,反之亦然。如果没有,你也可以将上面的答案与bean的lazy init属性结合起来。
我不是原始的海报,但你能展示一下你的意思吗?谢谢! –
那么我想建议他是,如果在控制器注入后需要视图,那么他可以配置视图如下:
感谢您的更新! –
我不确定您使用的是哪种Java技术,但是在GWT应用程序中(并且使用MVP模式),不需要View对Controller进行引用:Controller(或Presenter )和视图是通过由视图实现的界面进行的。在您的特定情况下,你的代码应该是这样的:
定义显示inteface:
public interface Display {
public void registerEventListener(Listener aListener)
public List getSelectedFiles()
}
让观实现该接口:
public class View implements Display{
//The method implementations
}
,并在所有必要的绑定控制器:
public class Controller{
private Display view;
public Controller(){
//Or use some DI technology
this.view = new View();
//Get a Listener implementation, maybe an Anonymous Inner Class
this.view.registerEventListener(getListener());
}
public void processFiles(){
List files = view.getSelectedFiles();
//Do the processing here
}
}
要正确绑定视图和控制器,请右键单击* .asp x页面并选择“进入控制器”菜单。现在在相应的控制器中添加一个使用以下语法的方法。
public ActionResult viewName()
{
return view()
}
其中viewname是您的视图的名称,例如。在.net它是没有aspx扩展名的页面现在,当你右键点击视图并选择菜单“Go to view”,这会将你移动到受尊敬的页面,这确认了你的视图和控制器已被绑定好。
作为[Swing的确](http://www.oracle.com/technetwork/java/architecture-142923.html)并结合Controller和View。 – Jeffrey
我会反对在MVC中这样做,因为我记得它并不是真正用于服务器端事件处理。也许用jQuery处理事件在这里会更合适。 – Lilienthal