尽管我在网上阅读了很多论文和信息,但我还是 MVC 的新手。我知道这有点模棱两可,对 MVC 模式有很多不同的解释。但差异似乎有点小
我的主要问题是 - 是否总是需要 M、V 和 C 才能正确执行此操作?我没有看到任何人在我读过的任何东西中解决这个问题。示例(我在 Cocoa/Obj-c 中工作,尽管这无关紧要)..
1) 如果我的 GUI 上有一个简单的图像,或者只是为了用户方便而没有保存或修改的文本输入字段,那么这两个都是 V(视图)但没有 M(没有数据也没有域处理正在进行),并且没有 C 来桥接它们。所以我只有一些方面是“V” - 看起来不错
2)我有 2 个不同且可见的窗口,每个窗口上都有一个标记为“ACTIVATE FOO”的按钮 - 当用户单击任一按钮时,两个按钮都按下并更改为“DEACTIVATE FOO”,并出现第三个窗口标签“FOO”。再次单击该按钮会将两个窗口上的按钮更改为“ACTIVATE FOO”,并将删除第三个“FOO”窗口。在这种情况下,我的 V 由两个窗口上的按钮组成,我猜也是第三个窗口(可能所有 3 个窗口)。我肯定有一个 C,我的 Controller 对象将知道这些按钮和窗口,并将获得它们的点击并保持有关窗口和按钮的通用状态。但是,无论我有 1 个按钮还是 10 个按钮,我的窗口被称为“FOO”或我的窗口被称为“BAR”,这无关紧要。这里没有领域知识或数据——只是对视图的控制。所以在这个例子中,我真的有“V”和“C”,但没有“M”——可以吗?
3)最后一个例子,我跑得最多。我有一个文本输入字段作为我的视图。当我在其中输入文本时,比如说一个代表重力的数字,我将它保存在一个模型中,该模型可能会在考虑我的重力参数的同时执行诸如计算球的物理等事情。这里我有一个 V 和一个 M,但我不明白为什么我需要添加一个 C - 控制器只会接受来自视图的信号并将其传递给模型,反之亦然。因为 C 只是一个纯粹的传递,它真的是“垃圾”代码,在我看来并没有让事情变得更加可重用。在大多数情况下,当某些事情发生变化时,我需要以几乎相同的方式更改 C 和 M。我意识到认为大多数情况只需要 V 和 M.. 引导我进入下一个主题可能是 MVC 初学者的错误
4) 在 Cocoa / Xcode / IB 中,我猜我的 Controller 应该始终是 IB 中的实例化对象?也就是说,我在 IB 中放置了所有“V”组件,并且对于每个 View 对象(相关的事物)集合,我应该有一个实例化的 Controller?然后也许我的模型不应该在 IB 中找到,而只能作为 Xcode 中的类找到,这些类与在那里找到的控制器代码相关联。这是准确的吗?这可以解释为什么你会有一个没有真正增加价值的控制器 - 因为你保持一致..
5)如何命名这些东西 - 对于我上面关于 FOO / BAR 的示例,可能以 Controller 结尾的东西是 C,如 FancyWindowOpeningController 等?对于模型 - 我应该给它们加上 GravityBallPhysicsModel 等后缀,还是应该只命名我喜欢的那些?我没有看到足够多的代码来知道野外有什么,我想尽早走上正确的轨道
提前感谢您让我直截了当或让我知道我走在正确的轨道上。我觉得我开始明白了,我在这里所说的大部分内容都是有道理的,但验证我的猜测会帮助我感到自信。