2011-12-21 58 views
1

我開始學習編程,並創建了一個簡單的BlackJack控制檯遊戲。現在我試圖用swing/JFrame創建一個GUI,並決定嘗試和同時學習MVC的基礎知識。我遇到了這個關於MVC的java/gwt UI coding - clean code基本MVC - 簡單Java程序

我的問題是,View究竟應該如何在玩家擊中「命中」後通知玩家手上的變化。

如果用戶想打,hitBtn(in VIEW) -> actionListener()(in CONTROLLER) -> hit()(in MODEL)

- hit() would than modify the nessessary model classes 
    (i.e. DealtCards, Deck, Cards objects) 

應如何視圖知道模型類的模式已經改變,更主要應該如何查看顯示的數據,例如玩家的手?在模型類中使用getter方法或從Model到Controller傳遞到View? (我覺得View不應該有任何型號的參考)

謝謝!

回答

1

用於通知關於模型的變化的觀點:
1. PropertyChangeListener
2.控制器可以作爲視圖和模型中傳播的變化之間的橋樑作用。
我不認爲從視圖引用模型並不總是不可接受的。如果您對模型類型有明確的接口,並且隱藏了實際的實現,則視圖可能會引用它。
也看看data binding,這是SWT,但方法是獨立於實現。

0

視圖中沒有引用控制器的問題,也沒有控制器引用視圖。它必須以這種方式才能發揮作用。重要的是你如何將引用傳遞給每個引用,以使它們鬆散耦合。我通常使用對接口和構造函數或setter注入的引用來執行綁定。更多關於在這個環節上控制反轉:
http://martinfowler.com/articles/injection.html

基本思想MVC是:

  • 爲模型,視圖和控制器代碼接口。
  • 模型,視圖和控制器的代碼實現。
  • 儘可能地去耦它們。

關於控制器的提示:我通常會將ActionListeners和其他特定的GUI類放入視圖實現中,並從那裏將我自己的事件發送到控制器。這樣,如果我想將應用程序移植到具有不同GUI的其他平臺,我可以重新使用視圖界面,​​控制器界面和可能的控制器實現。唯一通常不可重複使用的是視圖實現和模型實現。