2011-12-21 89 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的其他平台,我可以重新使用视图界面,​​控制器界面和可能的控制器实现。唯一通常不可重复使用的是视图实现和模型实现。