【问题标题】:Can i change the view without changing the controller?我可以在不更改控制器的情况下更改视图吗?
【发布时间】:2010-03-17 14:38:15
【问题描述】:

假装1有个地方可以输入名字:

    姓名:__________________

当文本框发生变化时,该值被控制器吸收,控制器将其存储在数据模型中。业务规则要求输入一个名称:如果没有输入文本,TextBox 应该在视图中用颜色表示错误;否则它可以是视图喜欢的任何颜色。

TextBox 包含一个String,控制器处理一个String,模型存储一个String


现在让我们说我想改善视图。

有一种新的文本框2,它不仅可以输入基于字符串的键盘输入,还可以输入图像。视图(当前)知道如何确定图像的格式是否正确,以执行从中提取文本所需的处理。如果有文本,则可以将该文本提供给控制器,控制器将其提供给数据模型。

但如果图片无效,例如3

  • 文件格式错误
  • 尺寸无效
  • 位深度无效
  • 未处理或未知的编码格式
  • 注册标记丢失或位置不正确
  • 内容无法识别

视图可以向用户显示图像不好的东西。

但是“告诉用户某事不好”应该是控制器的工作。

当然,我不会重写控制器来处理基于图像的文本输入(例如基于图像的名称)。

a. 代码被二进制锁定在 GUI 小部件中4
b. 除了这个之外还有其他视图,我'我不会将特定视图强加到控制器上
c. 我只是不想。如果我必须在此 UI 改进之外进行更改,那么我将不改进 UI5

那么对于同一个ModelController有不同的view是什么想法呢?



吹毛求疵的角落

1 人为的假设示例
2 例如条形码、g-mask、ocr
3 人为的假设原因
4 或 USB 条形码扫描仪的硬件
5 强制用户继续使用DateTimePicker 而不是TextBox

【问题讨论】:

    标签: model-view-controller user-interface language-agnostic


    【解决方案1】:

    我认为您已经触及了 MVC 编程的本质:理想情况下,当您更改视图时,您不必更改模型 控制器。但是,您在此处编写的内容基本上是控制器的 适配器(因为您无法更改控制器),因此您需要一个辅助控制器来将您的图像(或其他)转换为控制器可以理解。

    或者换句话说;视图只是在提取文本时绘制显示图像的框架的代码,图像->文本适配器实际上是一个控制器。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-05
      • 2013-12-07
      • 2019-06-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多