【问题标题】:Where should I draw the line between view and controller in a stateful application?在有状态的应用程序中,我应该在哪里画出视图和控制器之间的界限?
【发布时间】:2012-12-04 23:19:25
【问题描述】:

在 Web 上的 MVC 应用程序中,很容易在视图和控制器之间划清界限 - 视图向用户显示数据,而控制器收集输入并根据提供的输入将用户路由到视图。但是在有状态(例如桌面)应用程序中,要知道在哪里划线有点困难,因为操作之间的界限不像 Web 应用程序那样清晰。那么我在哪里画线呢?

例如,我的应用程序中有一个视图,它允许用户将项目放置在网格上。现在,我在视图本身中有“在网格上放置项目”代码(访问网格模型以进行实际放置)。但我也可以将它放在控制器中,并将必要的信息从视图传递给控制器​​。两者似乎都不是一个明确的选择 - 将代码放在视图中最终会使视图膨胀,因为用户可以执行大量操作,而不仅仅是放置项目;但是将它放在控制器中似乎是额外的间接级别,使代码更难遵循。

或者我做错了?这是一个 WinForms 应用程序;我的“视图”实际上是一个表单,表单本身既可以接收输入,也可以显示信息。那么区分就没有意义了吗?还是我应该将视图与表单分开?还是 MVC 模式与 WinForms 完全不兼容?

【问题讨论】:

    标签: winforms model-view-controller design-patterns


    【解决方案1】:

    MVC 是关注点分离。它旨在帮助程序员将这两个区域的细节分开。 MODEL 和 VIEW 是对象的集合/分组。

    VIEW 中的每个对象都可能是 BUTTON、WINDOW、TEXTAREA 等类集的一部分。

    MODEL 中的每个对象都将具有与您的域对应的类型,例如 CUSTOMER_DETAILS、ADDRESS、POSTCODE 等

    CONTROLLER 对象为您的 MODEL 对象提供了一个接口,您的 VIEW 对象将使用该接口与您的系统进行通信。 CONTROLLER 还可能包含无法存储在您的 MODEL 对象中的功能。

    传统的 MVC 还允许 VIEW 对象绕过 CONTROLLER 并直接与 MODEL 对象对话,但不建议这样做。

    所有对象都符合OO原则,是完整的、功能齐全的对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-01-27
      • 2011-07-18
      • 2014-08-05
      • 2011-03-30
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多