如果用户从一个视图输入一些无效数据,例如:
电子邮件: bill@apple.com
然后我希望控制器:
但是如果用户在不同的视图中输入相同的无效数据,我希望控制器能够:
但是如果用户在不同的视图中输入相同的无效数据,我希望控制器能够:
另一种观点可能会出现:
另一种观点可能会出现:
另一种观点可能是:
[ad infinitum]
不使用n-controllers进行n视图,我该怎么做?
我正要问一个关于stackoverflow的新问题,'我如何让控制器根据视图改变其行为。“但后来我意识到我已经使用了完全相同的问题标题。
今天的例子:
如果输入的数据对于某些数据库表的某些部分而言太长,它将进入,然后执行验证并拒绝保存。
除非数据来自其他视图。在这种情况下,自动修剪某些字段以适合数据库规则
除非数据来自其他视图。在这种情况下,要求数据库抛出它的truncated
异常
我在阅读的书籍/文章/博客中看不到MVC的许多实际问题 - 难怪我不会使用它。
答案 0 :(得分:1)
每个视图必须完成的逻辑必须驻留在某个地方。我建议您使用该信息授权视图,而不是使用多个控制器,或者在view =>之间创建某种映射。单个控制器内的配置。
我不知道这些视图在您的域名中代表什么,但如果允许自动更正,则无效数据可以保存到模型中,视图似乎是命令,视觉指示无效数据等为什么不用所有信息赋予视图权力?
这些视图中的每一个都具有某些属性。
acceptsInvalidData => boolean, place invalid data to model
requiresAutoCorrection => boolean, auto-correct the data
synchronizeWithModel => boolean, always keep the view in sync with the model
allowsSavingInvalidData => boolean, allow saving of invalid data
invalidDataIndicator => string:color, how to color view for invalid data
鉴于这5个属性(可能缺少一个或两个),控制器可以启动一系列操作,这些操作将唯一地处理每种类型的视图。视图必须将自己或属性暴露给控制器。
答案 1 :(得分:1)
您的示例可以在视图中进行一些推广,但是,某些用例确实需要不同的控制器imho。您也可以尝试在模型中添加一些逻辑。 颜色是直观的东西,控制器应该决定将数据保存在模型中是否合理,如果该数据没有决定是否应该保存的某些属性,请将它放在控制器上,可能是不同的。自动更正应该在视图和帮助程序中。 那只是我的意见。
答案 2 :(得分:0)
总结问题:
如果没有 N 控制器,您似乎想要 N 不同的行为。
您不希望与视图和控制器(没有1&lt; - &gt; 1关系)紧密结合,但您想要< strong>控制器,可以对每个视图的行为进行强有力的控制。
让我以不同的方式说明:
在没有 N 对象的情况下,您似乎想要 N 不同的行为。
您不想紧密耦合 A对象和 B对象(没有1&lt; - &gt; 1关系),但您想要< strong> B object 对每个 A对象的行为进行严格控制。
以下是我看到这两个问题的方法:
这不是MVC
的问题,它是一个典型的软件问题:您要么需要N个对象才能拥有N种不同的行为,要么需要参数化这些行为以便您可以提炼出共性(例如,Anurag建议的方法)少于N个单独的对象和/或诉诸巨大的案例陈述。 : - )
这个不是MVC
的问题,而是它的权衡之一。 MVC
让我们将M,V和C代码分离,以方便将来的更改(例如更改或添加视图)。但是权衡不是免费的,组件必须具有较少的知识和彼此的控制。要么放弃控制器对视图的严格控制(没有 N 不同类型的行为),要么放弃C和V之间的隔离(例如,允许1&lt; - &gt; 1紧耦合视图控制器)。
当然,MVC
在将Ms与Vs和Cs解耦方面取得了巨大成功,但在将Vs和Cs相互解耦方面取得的成功较少。我认为今天的响应式接口需要耦合视图和控制器,或者以不同的方式开始,不值得努力和复杂,以强烈隔离视图和控制器。在现实世界中,这种经过修改的M(VC)
方法对我来说效果更好。