MVC/MVP 模式本质上是一个结构型模式, 客户端要触发一些Action,传递到Controller之后,再由它决定做什么动作,显示什么视图.
对于比较简单的Web界面还能应付, 但要做RIA界面,就有些勉为其难了.比如一个股票软件,界面上有几十个股票要实时更新股价.
估计很多人会说用Ajax可以搞定. 其实AJax出现了应该有10年了吧.最近才流行起来. 我感觉这个只是一个为实现富界面的丑陋的补丁.
因为它使得页面的流程变得很复杂. 比如说你要Ajax效果里面再嵌套一个Ajax效果,估计就歇菜了....
对象设计:角色、责任和协作"(Object Design: Roles, Responsibilities, and Collaborations))一书提出职责驱动开发,将领域对象行为上升为重点,提出了对象其实是在扮演某种角色,而角色是有职责的,然后会在一定场景上下文环境中实施一定交互行为 .
该书总结了集中式控制器4大缺点,MVC的控制器实际就属于这种集中式控制器风格:1.Control logic can get overly complex. 控制器会变得复杂
2.Controllers can become dependent on information holders' contents.控制器变得依赖信息数据中心或数据库了,控制器做很多事情,意味着领域对象就做很少事情,控制器最后不是只会做什么,决定战略性的事情,也和怎么做,如何实现等战术问题耦合。
3.Objects can become coupled indirectly through the actions of their controller. 对象将间接地通过控制器的action耦合在一起,一个对象在控制器中查询获得,然后复制给另外一个对象,这两个对象就耦合在一起。
4.The only interesting work is done in the controller.唯一有趣的工作是做控制器
微软的Model View ViewModel (MVVM)其实也是对MVC模式的分解,控制器变得可有可无,ViewModel变得非常重要,它起到数据绑定和转换作用
股票软件,界面上有几十个股票要实时更新股价,这样的话,界面的UI直接绑定到Object, Object的数值变化直接影响UI的值.