【问题标题】:MVC design questionMVC设计问题
【发布时间】:2009-11-21 17:54:38
【问题描述】:

我正在开发基本的 GUI 应用程序。我有计算时间的模型类,我需要显示这个时间以特定格式标记。根据 MVC 范式,正确的方法是什么?从逻辑上讲,我认为它应该在视图中格式化,但视图是标准的标签控件,对于这种情况,实现子标签类似乎有点压倒性的任务。如果我在控制器中格式化它会正确吗?或者我应该在模型中格式化它?

【问题讨论】:

    标签: model-view-controller design-patterns


    【解决方案1】:

    我将演示视为视图的工作。根据用户的区域设置和偏好进行格式化显然是一个演示问题。这可能看起来有点开销,但你肯定会得到一个可重用的小部件,它可以在许多视图中使用吗?许多现有的视图框架将提供开箱即用的此类功能。

    只是为了添加更多东西......在我的世界中,控制器甚至不知道视图显示什么数据。一个模型可能会提供各种可用的信息,一个视图可能只选择其中的一些。日期可能根本不显示,或者由一个漂亮的小日历小部件表示。无论哪种情况,控制器都不需要格式化日期。让 View 完成自己的工作,从 Model 或 DTO 中获取 Model 返回的数据并传递给 Controller,无需进行解释。

    【讨论】:

    • 我同意这一点,因为如果您要使用基于 MVC 的框架,请坚持使用该框架的方法。但是,如果您尝试从头开始封装 MVC,这将变得更加困难。
    【解决方案2】:

    如果您想测试格式化时间,则在控制器中包含格式化逻辑。

    否则,将其留在视图中即可。

    【讨论】:

    • 如果我的视图可以使用格式化库(例如考虑 JSP 和 taglib),那么这些库可以很容易地进行测试,那么视图逻辑实际上可能不会与难以测试的视觉效果相关联。
    • @djna:我从来没有建议格式化逻辑很难测试。但我当时认为单元测试应该针对控制器。
    【解决方案3】:

    我会将国际化格式放在控制器中,因为我相信视图旨在简单地显示它们所提供的内容。如果您的应用程序需要,这也使控制器能够为不同的语言环境选择完全不同的视图。

    【讨论】:

    • 那么如果这是一个输入字段而不是显示字段,那么View有什么知识呢?他能弹出一个合适的选择小部件吗?当该选择小部件返回一个值并且该字段要显示它时,我们是否需要前往控制器?
    【解决方案4】:

    根据 MVC 模式,您可能会考虑这样做:

    1:您从控制器运行模型并获取计数时间 2:控制器从模型中获取结果并发送到视图 3:您在视图页面上输出相同的变量。

    就是这样……

    【讨论】:

      猜你喜欢
      • 2011-09-26
      • 1970-01-01
      • 2011-01-11
      • 1970-01-01
      • 1970-01-01
      • 2011-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多