理想情况下,该模式应使以下操作更加容易:
- 关注点分离 - 代码的模块化/可重用性 - 单元测试
有哪些模式符合要求?是否有遵循此模式的框架示例?
MVC并不是Rails引发的狂热。它起源于Smalltalk。您还可以在早于Rails的GoF书中查看其历史。
除了GoF书之外,我不知道其他模式,但我认为分层(例如,单独的Web、服务和持久化层)和分解的一般思想仍然适用。
Lift web框架采用其创建者所称的“View First”方法。
与MVC不同的是,控制首先由视图处理,而不是由控制器处理。视图可以调用多个“片段”中的逻辑(最接近控制器的类比)。
我认为这是RESTful设计的一种倒置,其中URL映射到资源,并且视图是显示这些资源的一种方式。在View First中,URL映射到视图,可以提取和显示任意集合的资源。
这背后的原因是,网站或应用程序上的页面通常需要显示比请求的资源更多的内容:它可能有一个最近博客评论列表,一个“喊话盒子”等等。其他框架通过具有辅助机制来处理此内容并处理输入(例如Django的模板包含标签和中间件),并将控制器*留给页面正在显示的主要资源。
(*在像这样的讨论中涉及Django很棘手,因为本质上它是MVC,尽管出于微妙的原因,其创建者使用Model-View-Template术语。在这里,我将称Django的视图为控制器。)
你看过MVP了吗?
这是一个广为人知的MVC的替代品,并且已经在很多“著名”的模式书中有所涉及。
你可以在这里读到Martin Fowler将MVP实际上分成了两个模式。
这里有一个用于PHP的MVP框架。
这里是.NET的一个框架。
值得注意的是,负责MVC的.NET团队也受到了Django的影响,而不仅仅是Rails。
观察者模式
工厂模式
虽然MVVM(或DM-V-VM)已经被提到过了,但在MSDN网络上有一系列关于它的好文章(尽管主要涉及WPF)。如果你正在寻找另一个DM-V-VM示例,我恰好写了一个PHP框架,大部分遵循这种模式。
此外,我认为在Web应用程序开发中,MVC有很多不同的解释。例如,只需比较Apache Struts和CakePHP背后的(关于MVC的)思想即可。我没有使用RoR,但我会进一步了解MVC(再次强调,在Web应用程序开发中)。