MVC控制器和视图关系

时间:2012-08-20 18:02:50

标签: actionscript-3 model-view-controller view controller

首先,我在网上做了很多研究(包括这个网站),并且发现了很多关于模型和控制器如何以MVC模式进行通信的相互矛盾的信息。这是我的具体问题(我使用的是AS3),但这是一个普遍的MVC问题......

我有两个主要组件......配方列表和显示所选配方的表单。表单具有编辑状态,允许您编辑配方,然后保存或取消更改。什么是处理对配方所做更改的最佳方法(使用MVC原则)?到目前为止,我有一个保存按钮触发一个由控制器捕获的事件。

我是否应该使用保存按钮(视图)传递具有字段当前状态的对象以及事件(视图中的某些逻辑)?我是否应该允许控制器保持对视图的访问权限并让控制器自己找出字段中的内容(添加耦合)?每次更改表单中的字段并且控制器跟踪每个字段的状态(许多事件)时,是否应该发生事件?或者是他们的另一种方式?注意:我不想将字段绑定到模型,因为我只想在单击保存按钮时保存数据。

非常感谢任何帮助。谢谢!

3 个答案:

答案 0 :(得分:0)

我认为这确实是一个数据库问题。我要做的是创建一个存储过程,首先检查配方是否已经存在。如果是,则更新它。如果没有,则添加新配方。 (您必须将您的实体绑定到存储过程。其他MVC框架可以执行此操作。我不知道actionscript)

如果那不是一个选项那么我猜你必须将原始表单缓存在控制器的helper类中,然后将其与用户试图保存的内容进行比较。并让控制器决定是否更新配方。

我认为使用第一种方式更清洁,但我从未使用过动作脚本......

答案 1 :(得分:0)

  

我是否应该使用保存按钮(视图)传递一个对象   字段的当前状态以及事件(视图中的某些逻辑)?

是的,这不是“视图中的逻辑”,它不会做出任何决定,只是报告一个动作及其当前状态

  

我应该允许控制器保持对视图的访问权限并拥有   控制器自己弄清楚字段中的内容(添加   耦合)?

不,这会变得非常混乱,通过事件传递VO

  

每次更改表单中的字段时都应该发生事件   控制器跟踪每个字段的状态(很多   事件)?

是一个选项,但这与点击保存按钮基本相同,触发器不同(TextField.onChange),但您可以调度相同的事件(setup is form = view,使用VO调度一个常规事件,而不是每个领域的事件)

  

或者他们是另一种方式?

MVC流程w / events:

  1. onClick save btn:调度RecipeEvent.SAVE(从视图中),包含配方数据的VO(值对象)(例如RecipeVO)
  2. 控制器捕获了这个,并且由于控制器是逻辑所在的位置,它决定如何处理它:更新RecipesModel(直接通过调用模型上的方法,或通过自定义事件,例如RecipeModelEvent.SAVE)
  3. 模型存储数据,并调度RecipeEvent.UPDATE事件(使用RecipeVO)
    • 视图相应更新(检查RecipeVO.ID是否相同,更新数据表示,例如标题......)
    • 可选地,控制器可以将数据保存到后端/远程数据库
  4. 至于事件监听器:视图监听模型,控制器监听视图。

    关于解耦: 使用接口(通过使用IModel,您可以通过另一个实现轻松地交换模型,因为您在接口上注册事件侦听器而不是实际的实现)

    显然,所有这些导致大量注册/删除事件侦听器,并保持对模型/视图/控制器的引用,以便能够注册到适当的实例。另一种方法是使用框架作为RobotLegs,因为它使中央事件总线可用+在视图的中介类中轻松/自动清理事件侦听器。

答案 2 :(得分:0)

Colin Moock在ActionScript中关于MVC的讲座已经很老了,但仍然是最好的解释之一:http://www.moock.org/lectures/mvc/

您的模型应填充您的视图,您的视图应将输入事件发送到控制器,控制器应决定如何处理输入。正如g10所说,等到单击保存按钮,然后将带有修改字段的对象传递给控制器​​进行处理。然后,控制器可以决定是否接受它,以及是否更新现有模型对象或创建新对象。

相关问题