为了让自己更深入的理解框架,最近自己的着手开发一个框架,卡在了设计模式这块,于是进行了资料的搜集、分析和整理。
作为一个PHPer,最先接触到的也是唯一接触到的MV+的逻辑架构就是MVC
MVC
以下内容来自某百科
- 定义:
MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑、数据、界面显示分离的方法组织代码,将业务逻辑聚集到一个部件里面,在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。MVC被独特的发展起来用于映射传统的输入、处理和输出功能在一个逻辑的图形化用户界面的结构中。
- 编程模式
MVC 是一种使用 MVC(Model View Controller 模型-视图-控制器)设计创建 Web 应用程序的模式:
- Model(模型)表示应用程序核心(比如数据库记录列表)。
- View(视图)显示数据(数据库记录)。
- Controller(控制器)处理输入(写入数据库记录)。
MVC 模式同时提供了对 HTML、CSS 和 JavaScript 的完全控制。
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
这是对于mvc最基础的定义,然后在此基础上我搜集了一下其他的逻辑架构,找到了MVP和MVVM。
MVP
(全场最佳!!不好意思走错片场了)
mvp的说法在web中并不多见,但是却很常见通过它的理念实现的代码——加强Controller
- 来自某维基的定义
Model-view-presenter,简称MVP,是电脑软件设计工程中一种对针对MVC模式,再审议后所延伸提出的一种软件设计模式。
Model-view-presenter (MVP) 是使用者界面设计模式的一种,被广范用于便捷自动化单元测试和在呈现逻辑中改良分离关注点(separation of concerns)。 这里可以参考下这篇csdn上的博客
要分离就分离个彻底吧,MVC不是要低耦合吗,我们干脆就把view和model也分开好了,把所有任务都交给controller,而且我们这是新造的轮子,还要改个名,那就叫议长好了,议长说什么就是什么,要连数据库你得问议长,要渲染数据到页面你也得问议长,这就产生了这个新的架构。 从PHP的角度来说,一些框架就正在将越来越多的任务交给Controller(而且还硬要叫MVC)。
MVP相对于MVC,让Controller变得日益臃肿,如:
- 这段代码好像跟model有关诶,但是不是直接调的数据,放在controller里好了~
- 这段代码要在view中渲染诶,但是好像没有处理业务逻辑,放在controller里好了~
- 这段代码不知道放在哪里诶,放在controller里好了~
- 最近新英雄太强了,我们削弱刀妹好了~
这时我看到了InfoQ上的一篇文章“被误解的MVC和被神化的MVVM”,感觉深受启发:
我们来看看 MVC 这种架构的特点。其实设计模式很多时候是为了 Don’t repeat yourself 原则来做的,该原则要求能够复用的代码要尽量复用,来保证重用。在 MVC 这种设计模式中,我们发现 View 和 Model 都是符合这种原则的。
……
如果我们能够意识到 Controller 里面的代码不便于复用,我们就能知道什么代码应该写在 Controller 里面了,那就是那些不能复用的代码。
我觉得目前而言,MVC确实是web最好的解决方案,直到以后因为需求和技术的变化演变出来新的解决方案。