我需要视图来保存对控制器的引用,因为它需要将控制器注册为事件侦听器。我需要控制器来保存对视图的引用,因为单击按钮后,我需要能够在列表中获取选定的文件。(我有一个文件列表和一个“添加集群”按钮,所以当单击该按钮时,我需要获取选定的文件)
简而言之,我有:
Controller controller(view);
View view(controller);
我敢肯定这里有一些不好的设计,我只是不知道如何避免它..
我需要视图来保存对控制器的引用,因为它需要将控制器注册为事件侦听器。我需要控制器来保存对视图的引用,因为单击按钮后,我需要能够在列表中获取选定的文件。(我有一个文件列表和一个“添加集群”按钮,所以当单击该按钮时,我需要获取选定的文件)
简而言之,我有:
Controller controller(view);
View view(controller);
我敢肯定这里有一些不好的设计,我只是不知道如何避免它..
我不确定您使用的是什么 Java 技术,但在 GWT 应用程序中 - 并使用 MVP 模式 - 视图不需要引用控制器:控制器(或演示者)和视图之间的所有通信是通过 View 实现的接口实现的。在您的特定情况下,您的代码应如下所示:
定义一个显示接口:
public interface Display {
public void registerEventListener(Listener aListener)
public List getSelectedFiles ()
}
让 View 实现该接口:
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
}
}
一种可能的解决方案:
addView(View view)
方法addController(Controller controller)
方法。 好吧,我相信您可以使用封装以及延迟初始化过程。我相信您在控制器初始化时不需要视图,反之亦然。如果不是,您也可以将上述答案与 bean 的惰性初始化属性结合使用。
要正确绑定视图和控制器,请右键单击 *.aspx 页面并选择“转到控制器”菜单。现在在受人尊敬的控制器中添加一个具有以下语法的方法。
public ActionResult viewName()
{
return view()
}
其中 viewname 是前视图的名称。在 .net 中,它是没有 aspx 扩展名的页面名称 现在,当您右键单击视图并选择菜单“转到查看”时,这会将您移动到受尊重的页面,这确认您的视图和控制器已很好地绑定。
创建四个部分:1-Control 2-Model 3-View 4-ViewInterface
第 4 节是 Control 和 View 之间的中间层。当您初始化 View 时初始化 IControl 接口,如
IControl control = new ControlUtil((IViewUtil(new ViewUtil());
您将视图界面传递给要使用的控件。当视图想要调用控件时,就像在说“嘿控件做某事,这是我的界面,以防你需要它。