模型视图控制器 - 保持简单逻辑的位置

dav*_*vid 4 model-view-controller design-patterns actionscript-3

我经常看到模型视图控制器模式的非常不同的实现,并且完全理解你应该适应和使用最适合你需求的东西,但我想知道在以太中保持简单游戏逻辑的优点/缺点/最佳实践控制器或型号?

从本质上说,这是我应该这样做的正确方法吗?

对于这个简单的例子,玩家受到了伤害,我列出了三种可能的处理方式:

1.

位指示:

_model.playerDamage - 15;
if (_model.playerDamage <= 0){
    _model.playerLives --;
    _model.restartLevel();
}
Run Code Online (Sandbox Code Playgroud)

2.

控制器:

_model.playerDamage = 15;
Run Code Online (Sandbox Code Playgroud)

模型:

function set playerDamage(value:int){
     playerDamage = value;
     updatePlayer();
}

function updatePlayer():void{
    if (playerDamage<=0){
         palyerLives --;
         restartLevel();
    }
}
Run Code Online (Sandbox Code Playgroud)

3.

控制器:

_model.playerDamage = 15;
_model.addEventListener('playerChange', checkPlayerStatus);

function checkPlayerStatus(e:Event):void{
    if (_model.playerDamage<=0){
         _model.playerLives --;
         _model.restartLevel();
    }
}
Run Code Online (Sandbox Code Playgroud)

模型:

function set playerDamage(value:int){
     playerDamage = value;
     dispatchEvent(new Event('playerChange'));
}
Run Code Online (Sandbox Code Playgroud)

Nil*_*esh 6

模型中的当然因为您可能有多个控制器(将来)以类似或相同的方式影响模型中的事物.控制器只是将UI事件转换为业务事件的一种机制.模型是处理逻辑的地方.

您可能会发现以下stackoverflow线程有用:

  1. MVC模式是纯粹的表示层模式吗?
  2. 我称之为编排我的Web应用程序的代码是什么?

虽然它们是特定于Java的,但这里讨论的想法是独立于平台的.

希望有所帮助.