我不知道這是否壞,讓視圖瞭解控制器,以便它可以委託視圖中發生的動作等,並讓控制器知道視圖(這顯然是正確的),但是它是雙向關係,我想知道是否正確?我想要在視圖中引用控制器,因爲我想將所有工作委託給控制器並保持視圖乾淨。這是不好的MVC設計?
這是不好的設計,如果是這樣,我可以做什麼不同,仍然實現相同?
控制器:
public class Controller {
private View view;
public Controller() {
view = new View(this);
}
public void doSomeButtonAction() {
// More code...
}
}
查看:可能派上用場後來是去除您Controller
的構造函數依賴
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();
}
}
看起來完全像它應該。如何查看*不知道控制器? – Affe 2013-02-28 18:44:33
您可以通過控制器中的「視圖」參考開始訪問'getters',然後在控制器中附加事件監聽器等。那麼現在需要有一個參考。所以,是的,這個觀點可以在不知道控制器的情況下生活。 – LuckyLuke 2013-02-28 18:46:33
它是一個可重用組件嗎?關於在編譯時定義按鈕實際上做了什麼的觀點,並沒有什麼固有的「壞」,而不僅僅是它們存在並等待在運行時向他人學習他們所做的事情。 「這個按鈕保存那行數據」是一個有效的視圖級別規範。 「這個按鈕是存在的,如果有人註冊了一個監聽器,可能會做一些事情」不夠有幫助:)。爲了它而添加另一個抽象層只是讓所有其他的東西難以閱讀! – Affe 2013-02-28 19:11:28