MVC
MVC中,View 只是显示Model,而不直接改变Model。它是通过Controller来响应鼠标、键盘的输入消息,把输入转化为service,然后把service送给View或Model。用户只通过Controller与系统交互。
在MFC下,View是直接拿到windows消息的。 一般情况下, 我们会在View中处理消息,然后直接通知View或Model怎样改变。 View实际上完成了View和Controller的工作。
可以特意建立一个Controller,然后把View中的消息直接委托给Controller处理。这样就完全遵守了MVC。
另一个想法,让View初步处理消息,把必要的处理委托给Controller。比如存在方法Controller::Save(),如果界面上有Button OK 和 APPLAY,可以让View::OnOk()或View::OnApply()调用Controller::Save(). View本身来控制自身的显示,仅仅把需要响应的特定消息委托给Controller。
可以对Controller编码来自动测试View上的绝大多数功能而不依赖于鼠标和键盘的输入事件。也可以把ToolBar等控件视为View,在Controller之上添加脚本解析器,对于界面的特定Button,只需要绑定脚本命令即可。如果对于WPF完成这样的工作,部分界面处理的工作不用程序员的参与就可以完成了。
稍复杂的情况下,Controller不是对Model的Façade。每个View都应该有自己的Controller, Controller是对自己所属View的特化。Model的Façade可另外提供。简单的情况下,可以View共享Controller, Controller也许可以完成对Model的Façade工作。
至于Controller方法的粒度和View处理消息的职责范围可以进一步考虑。因为没有真正实现,我也不能想出遵循怎样的规则较好。以上只是一个大概的想法。