我可以在不更改控制器的情况下更改视图吗?

时间:2010-03-17 14:38:15

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

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

姓名:__________________

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

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


现在我想说要改进视图。

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

但如果图像无效,例如 3

  • 文件格式错误
  • 无效尺寸
  • 无效位深度
  • 未处理或未知的编码格式
  • 缺少或错误找到注册标记
  • 内容无法识别

视图可以向用户显示图像不好的内容。

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

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

a。代码被二进制锁定在GUI小部件 4 中   b。除此之外还有其他观点,我不打算将特定视图强加给控制器
  c。我只是不想。如果我必须改变UI改进之外的东西,那么我将保持UI未改进 5

那么对于相同的模型控制器有不同观点的想法是什么?



Nitpicker's Corner

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

1 个答案:

答案 0 :(得分:0)

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

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