它的解释方式是通过使用事件和发布/订阅模型。基本上,模型只是数据,它不知道视图/GUI/UI。模型通常只是一个抽象对象,它对其数据进行操作,并且可以执行操作等等。
视图是一个不同的类,它响应模型中的变化并且通常将这些数据显示给用户。以前,我不知道如果没有视图和模型之间的耦合,这怎么会发生,但是用事件解释它可以消除很多混乱。这是否意味着模型包含在发生有趣事情时自身引发的公共事件?例如,如果我们正在编写一个国际象棋游戏,当一个棋子被移动时,模型将PieceMoved
使用必要的信息(哪一个棋子,从哪里移动到哪里等)引发事件,并且视图可以订阅这样一个事件,然后显示作品从旧方块移动到新方块的动画。
仍然让我感到困惑的部分是控制器的确切性质。我无法理解它如何为模型和视图提供新信息。我想控制器包含对模型和视图的引用。与国际象棋示例保持一致,控制器是否会仅响应用户输入(例如移动棋子),然后仅向模型建议要移动的棋子到哪里?然后模型获取这些信息,查看它是否是合法的移动,如果是,相应地更新模型,引发PieceMoved
事件,视图对此做出反应并相应地更新图形领域?
最后,控制器如何找出试图移动的部分?似乎这种类型的东西与视图密切相关(假设移动涉及首先单击您要移动的部分,然后单击目标方块)。我想控制器会响应鼠标点击并将这些坐标发送给模型,但是模型如何知道如何转换这些坐标以找到选择了哪一块?这不是与视图密切相关吗?看起来视图必须执行一些逻辑处理,而不是简单地响应模型和控制器,但它不再是正确的视图(而是视图/模型组合)。