除了用于Web的MVC之外,还有其他设计模式吗?


15

我想知道除了MVC之外,还有Web设计模式吗?

我知道有一些设计模式,例如:Registry,Observer,Factory,ActiveRecord,...和MVC一组其他设计模式和文件夹结构。

是否有像MVC这样的设计模式是一组其他设计模式?

编辑:我的编程语言是PHP。


总是有BBOM模式
zzzzBov 2012年


我相信下面的答案可以回答您问题的所有方面。您可以接受最好的服务并为社区提供帮助。
2012年

FB的助焊剂模式如何。
穆罕默德·乌默

也请参见“ 查看优先”
nawfal 2015年

Answers:


25

在软件开发中有不同的模式。MVP,MVVM,MVC等是一些众所周知的。但是,您必须定义要解决或使用的特定问题或技术。

在此处输入图片说明

这些模式中的每一个都可以解决一些特定的问题。例如,MVP(模型视图演示者)模式有助于在ASP.NET WebForms开发中引入关注点分离。它包括将负责从网页收集,显示和存储数据的职责划分为单独的对象:模型对象,视图对象和演示者对象。

最著名的一般设计模式手册是“ 四人帮”(GoF)设计模式

在此处输入图片说明

编辑:我想您对在.NET平台上实现设计模式更感兴趣


1
+1是要与定义为模式的MVC一起生活,还是将很快或几乎看到它的继任者的技术?
2012年

6
+1但MVP,MVVM和MVC都是同一主题的变体:将(g)ui与模型逻辑分开,并在它们之间进行一些第三方(控制器,演示者)的调解。
Marjan Venema

2
@ Mr-Moqadam:MVC起初看起来像是一种矫kill过正,并且很复杂。它完成了您应该做的事情,将UI,逻辑和数据分开。在软件开发中唯一可以确定的是变更。根据经验;20%是发展,80%是维持。从这个角度来看,MVC确实值得付出努力。我猜,这也是实现这一目标的最基本模式。
布鲁诺·谢珀

3
@ Mr-Moqadam:不,即使您一个人,它也可以为您提供很多帮助。特别是在大型项目中。
布鲁诺·谢珀

1
@ Mr-Moqadam谁曾说过MVC是团队开发模式?我长期以来一直在使用PHP进行开发,而MVC对于保持事物的可维护性是必不可少的。您是否尝试过使用任何PHP框架?
Songo 2012年

7

我几个星期前遇到的一个不错的模式是MOVE。它看起来像MVC一样复杂,但是基于相同的原理。MVC的缺点之一是您的控制器可能变得非常大。使用MOVE模式,您将稍微解决这个问题。

由其他人命名的其他模式也是不错的选择。


我以为使用瘦控制器提升了MVC ?!您知道俗语“瘦控制器和胖模型”
Songo 2012年

确实如此,但实际上控制器往往会发胖。
2012年

2
那是因为您将域逻辑放入控制器中,这并不是原始的Krassner&Pope MVC的意图。原始形式的控制器是关于输入处理的,例如。将(X,Y)坐标上的鼠标点击关联到模型操作中(例如,在恒温器应用中提高温度)。也就是说,MVC意义上的大多数控制器层是完全自动化的,因此对于框架中的应用程序开发人员是不可见的。
Aadaam

像助焊剂一样运动
穆罕默德·乌默尔

4

首先要做的就是确定您到底需要做什么,以决定框架和/或MVC(或其他设计模式)是否会受益。

那里的框架提供了一个一致的开发平台,同时通常提供满足常见编程要求的解决方案(例如数据库交互,表单创建和验证,用户身份验证等)。

对于PHP而言,至少MVC / HMVC设计模式确实倾向于主导可用的主流框架(例如ZendCakePHPCodeIgniter等),但是可以使用许多不同的设计模式。

MVC之所以如此流行,是因为它提供了一种已建立且可理解的方式,可以将数据建模和处理逻辑与视图/表示层分离(为了产生健壮的,可伸缩的应用程序,人们认为这是合乎需要的)。

重要的是要注意(正如@Marjan Venema在对@ElYusubov的回答的评论中所表示的),MVC,MVP,MVVM和其他MV x模式(至少在原则上)都是相同的“设计模式”。

通常,不同的设计模式都可以(通常是巧妙地)达到不同的目的,并且在某些情况下,开发时都考虑了特定的语言。然而,真正的“设计模式”并不是编程的硬性规定,而是更多地是对程序实现,设计要求和逻辑功能的哲学/思想理解。

研究是找出不同编程原理和最佳实践的最佳方法,以下是一些Wikipedia链接可帮助您入门:

在实践中,没有什么可以阻止您实现自己的“模式”,IMO最好的方法就是边做边学,对我来说,至少直到我开始尝试使用MVC模式编写网站之前,我才完全不了解MVC模式。

一旦了解了一些编程概念和最佳实践,就可以使用它们来构建自己的系统,以解决您面临的特定问题并满足您的需求,无论它们是否符合既定的“模式”。

如果您没有特定的问题要解决,那么最好学习其中一个通用框架。


3

最著名的例子之一是Knockout.js,它是一个使用MVVM设计模式的javascript框架。在堆栈溢出方面,有一篇很棒的文章比较了MVC框架Backbone.js与Knockout.js

附带说明的是,MVVM设计模式源自Microsoft,是Martin Fowler的PM设计模式的专门化。MVVM被WPF应用程序广泛使用。


找不到网页!
穆罕默德·乌默

1
@MuhammadUmer谢谢,我已经更新了链接。不幸的是,StackOverflow删除了这个1000多分的问题。幸运的是,后退机器没有严格的审核系统。
dodgy_coder 2015年

一点也不惊讶...我希望所有这些网站也都像这样。
穆罕默德·乌默

0

正如ElYusubov指出的那样,如果您正在寻找相对主流的示例,ASP.Net框架早就具有MVP和MVVM模式。MVC和MVVM之间的主要区别之一是实体的更新方式。MVC更适合于Web应用程序的传统无状态或半无状态方法。ASP.Net框架试图通过将您的状态保持在某种形式下(因此可以在每个请求中将其还原)来解决此问题,这使得MVP和MVVM模式在这里更有意义。

借助HTML5,应用程序正变得越来越繁重,其大部分状态都在客户端上。这可能导致MVVM框架复活,而Knockout JS就是一个例子。


0

在野外的大多数模式是MVC或某种MVC风格。毕竟,合理的做法是拆分数据(模型),表示形式(视图)并与之交互(控制器)。如果您看一下80年代创立的MVC,您会发现它从来就不是一个Web框架。因此,我发现它在网络上负担太重。

另一个众所周知的模式是面向服务的体系结构(SOA)。在此基础上,一种现代的方法是在服务器上具有MVC(或风味),仅公开可以使用的服务。在客户端,将存在其他MVC样式的应用程序,例如HTML5和JavaScript支持的Web应用程序(例如Twitter或Linked In)。客户端应用程序将使用服务器端服务(服务器的“视图”)作为其模型。恕我直言,这将是最新技术,并且可能会将服务器端仅MVC推到一边。


0

我个人正在考虑使用资源方法表示的想法来实现某种东西,尽管在现阶段,它主要是一个实验,而不是其他任何东西。它确实具有一些引人注目的点,因为它比MVC更好地建模了HTTP请求/响应(这是针对在单台计算机上运行的长期应用程序,而不是短暂的请求/响应会话)。但是,这样做的缺点是,如果在资源中放置用于处理GET,POST,PUT,DELETE等的方法,那么资源将耦合到前端。我在想将其分离到另一层。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.