我想知道除了MVC之外,还有Web设计模式吗?
我知道有一些设计模式,例如:Registry,Observer,Factory,ActiveRecord,...和MVC一组其他设计模式和文件夹结构。
是否有像MVC这样的设计模式是一组其他设计模式?
编辑:我的编程语言是PHP。
我想知道除了MVC之外,还有Web设计模式吗?
我知道有一些设计模式,例如:Registry,Observer,Factory,ActiveRecord,...和MVC一组其他设计模式和文件夹结构。
是否有像MVC这样的设计模式是一组其他设计模式?
编辑:我的编程语言是PHP。
Answers:
在软件开发中有不同的模式。MVP,MVVM,MVC等是一些众所周知的。但是,您必须定义要解决或使用的特定问题或技术。
这些模式中的每一个都可以解决一些特定的问题。例如,MVP(模型视图演示者)模式有助于在ASP.NET WebForms开发中引入关注点分离。它包括将负责从网页收集,显示和存储数据的职责划分为单独的对象:模型对象,视图对象和演示者对象。
最著名的一般设计模式手册是“ 四人帮”(GoF)设计模式。
编辑:我想您对在.NET平台上实现设计模式更感兴趣
我几个星期前遇到的一个不错的模式是MOVE。它看起来像MVC一样复杂,但是基于相同的原理。MVC的缺点之一是您的控制器可能变得非常大。使用MOVE模式,您将稍微解决这个问题。
由其他人命名的其他模式也是不错的选择。
首先要做的就是确定您到底需要做什么,以决定框架和/或MVC(或其他设计模式)是否会受益。
那里的框架提供了一个一致的开发平台,同时通常提供满足常见编程要求的解决方案(例如数据库交互,表单创建和验证,用户身份验证等)。
对于PHP而言,至少MVC / HMVC设计模式确实倾向于主导可用的主流框架(例如Zend,CakePHP,CodeIgniter等),但是可以使用许多不同的设计模式。
MVC之所以如此流行,是因为它提供了一种已建立且可理解的方式,可以将数据建模和处理逻辑与视图/表示层分离(为了产生健壮的,可伸缩的应用程序,人们认为这是合乎需要的)。
重要的是要注意(正如@Marjan Venema在对@ElYusubov的回答的评论中所表示的),MVC,MVP,MVVM和其他MV x模式(至少在原则上)都是相同的“设计模式”。
通常,不同的设计模式都可以(通常是巧妙地)达到不同的目的,并且在某些情况下,开发时都考虑了特定的语言。然而,真正的“设计模式”并不是编程的硬性规定,而是更多地是对程序实现,设计要求和逻辑功能的哲学/思想理解。
研究是找出不同编程原理和最佳实践的最佳方法,以下是一些Wikipedia链接可帮助您入门:
在实践中,没有什么可以阻止您实现自己的“模式”,IMO最好的方法就是边做边学,对我来说,至少直到我开始尝试使用MVC模式编写网站之前,我才完全不了解MVC模式。
一旦了解了一些编程概念和最佳实践,就可以使用它们来构建自己的系统,以解决您面临的特定问题并满足您的需求,无论它们是否符合既定的“模式”。
如果您没有特定的问题要解决,那么最好学习其中一个通用框架。
最著名的例子之一是Knockout.js,它是一个使用MVVM设计模式的javascript框架。在堆栈溢出方面,有一篇很棒的文章比较了MVC框架Backbone.js与Knockout.js。
附带说明的是,MVVM设计模式源自Microsoft,是Martin Fowler的PM设计模式的专门化。MVVM被WPF应用程序广泛使用。
正如ElYusubov指出的那样,如果您正在寻找相对主流的示例,ASP.Net框架早就具有MVP和MVVM模式。MVC和MVVM之间的主要区别之一是实体的更新方式。MVC更适合于Web应用程序的传统无状态或半无状态方法。ASP.Net框架试图通过将您的状态保持在某种形式下(因此可以在每个请求中将其还原)来解决此问题,这使得MVP和MVVM模式在这里更有意义。
借助HTML5,应用程序正变得越来越繁重,其大部分状态都在客户端上。这可能导致MVVM框架复活,而Knockout JS就是一个例子。
在野外的大多数模式是MVC或某种MVC风格。毕竟,合理的做法是拆分数据(模型),表示形式(视图)并与之交互(控制器)。如果您看一下80年代创立的MVC,您会发现它从来就不是一个Web框架。因此,我发现它在网络上负担太重。
另一个众所周知的模式是面向服务的体系结构(SOA)。在此基础上,一种现代的方法是在服务器上具有MVC(或风味),仅公开可以使用的服务。在客户端,将存在其他MVC样式的应用程序,例如HTML5和JavaScript支持的Web应用程序(例如Twitter或Linked In)。客户端应用程序将使用服务器端服务(服务器的“视图”)作为其模型。恕我直言,这将是最新技术,并且可能会将服务器端仅MVC推到一边。
除了MVC以外,还有1000多种方式,其中有些与MVC类似,而有些则完全不同
例如 :
等等