在我看来,模型视图控制器模式的所有变体的差异(MVP http://martinfowler.com/eaaDev/ModelViewPresenter.html, 被动观点 http://martinfowler.com/eaaDev/PassiveScreen.html, 监督控制员 http://martinfowler.com/eaaDev/SupervisingPresenter.html, 查看模型,etc. http://martinfowler.com/eaaDev/PresentationModel.html)是相当微妙的。实际上,这完全取决于谁处理数据并从谁那里获取数据。他们都在试图解决同一个问题,分开某物 from 另一件事,解决方案以类似的方式完成所有这些工作。
当您从视觉角度思考时,几乎显而易见的是,这些概念在实现上是相似的:
Simplistic MVC:
+-------+ manipulates data
| Model |<---------------------+
+-------+ |
| |
| gets data |
v |
+------------+ serves data +------+
| Controller |------------->| View |
+------------+ +------+
Simplistic MVP:
+-------+
| Model |
+-------+
| ^
| | get/manipulates data
v |
+-----------+ serve data +------+
| Presenter |-------------->| View |
| |<--------------| |
+-----------+ tell changes +------+
它们的相似之处在于类层次结构在两者中看起来可能相同。然而,区别在于显示和操作数据的方式不同。当您推出自己的 MVC 时,您需要负责它的外观。
这其实并不重要,因为它们都基于将代码片段分离为自服务逻辑实体并减少代码重复的原则。只要您保留代码耦合度低 http://en.wikipedia.org/wiki/Coupling_(computer_science)最终应该会顺利进行。仅当您想要教条地遵循应用程序的架构时,它才重要。
务实一点,做最适合你需要的事情,因为无论如何你最终都会得到一个混合。根据视图的需要,在不同版本之间进行切换应该“相当”容易。跟着SOLID http://www.lostechies.com/blogs/derickbailey/archive/2009/02/11/solid-development-principles-in-motivational-pictures.aspx原则,你应该做得很好。 (也可以看看关于 SOLID https://stackoverflow.com/questions/449731/design-patterns-to-avoid/449753#449753).
我建议您研究一下是否有 MVC 或 MVP 框架,看看它是如何完成的。