我需要該視圖來持有對控制器的引用,因爲它需要將控制器註冊爲事件偵聽器。 我需要控制器來保存對視圖的引用,因爲按下按鈕後,我需要能夠在列表中獲取選定的文件。 (我有文件的列表,以及一個按鈕「添加組」,所以當點擊按鈕時,我需要得到所選文件)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