mvc设计模式现在过时了吗_【PHP】MVC框架为何这么难! 4年后终于明白了,被ThinkPHP害得!...

【PHP】MVC框架为什么这么难!!! 4年后终于明白了,被ThinkPHP害得!!

本帖最后由 default7 于 2014-05-15 18:39:05 编辑

这个帖子送给那些被ThinkPHP命名搞得晕头转向的PHP程序员~(by default7#zbphp.com)

4年前我的几个帖子

帖子1 《跟别人争论PHP中MVC的问题》 http://bbs.csdn.net/topics/350216861

发表于: 2010-12-10 22:38:53

其实这个帖子当时是使用ThinkPHP,但是运行极为缓慢,且网址怎么都对不上,最后放弃了使用MVC框架!

帖子2 《貌似突然理解了MVC模型》http://bbs.csdn.net/topics/390332774

发表于: 2012-12-29 16:47:22

这个帖子里面对MVC的理解其错误的,那种方法是工厂模式,并非MVC模式。

PHP MVC真心折磨人啊!!!~

MVC 是Model View Controller的缩写,是一种程序设计方式。可我虽然工作已经有五六年,一直做PHP程序员,但是始终没用过MVC框架更一直被MVC搞的晕头转向。国内MVC框架基本上都是ThinkPHP,很多次找工作,因为不会MVC,因为不用ThinkPHP框架,所以一直碰壁,越来越迷惑 怀疑 不解 抑郁。

这一次再次硬着头皮去理解掌握的心态,重新阅读ThinkPHP框架的官网资料,不过还是很遗憾,网址对应这里仍旧没看懂,越看越晕。不是说MVC吗,为什么没有Controller类? 为什么会出现一个Action类?“控制器”怎么不见了,但是却有一个“Action”? 为什么有“网址参数a”和“参数m”?“参数a”是不是指代“Action类”?“参数m”是不是指代“Model类”??

ThinkPHP 为什么会这么难

//文件地址:D:\zbphp.com\www\Lib\Action\MemberAction.class.php

class MemberAction extends Action {

public function index(){

$this->display();

}

public function login(){

$this->display();

}

public function register(){

$this->display();

}

}

每次看到ThinkPHP引以为傲的路由网址,就觉得晕!index.php?a=&m=,看到这样的网址,心里就会想“参数a的值”应该是指代“Action类”吧,那数“参数m”应该是指代MVC中的Model吧(模型)?

但是又觉得哪里不对。

Action是动作的意思,MVC是Model View Controller,那么为什么没有看到Controller类?后来仔细看,原来Action在ThinkPHP中就是控制器(但为什么要命名为Action??为什么不直接命名为Controller??)

再来说参数m,一开始理解就是Model类吧。但是更觉得奇怪,比如访问 index.php?a=index&m=content ,那按照这样的思路访问的就是 class IndexAction 下面的 content() 方法,不过很遗憾,错了。他访问的是 class ContentAction 下面的 index()方法。。。

到了这里,你就会明白了为什么ThinkPHP框架会这么难会这么复杂,因为他用了极容易混淆的方式来命名关键部分。

害人不浅的ThinkPHP

写到这里我真的忍不住想说ThinkPHP害人不浅,命名上弄出了

1) 网址参数a和类中的Action;

2) 网址参数m 和类中的Model;

3) 是MVC框架但却用Action类来表示Controller;

由于这三点让绝大多数想弄明白MVC的PHP程序员每次看都是一头雾水!

如果ThinkPHP 这样写,大部分人会立即明白MVC架构

//文件 D:\zbphp.com\www\Lib\Controller\MemberController.class.php

class MemberController extends Controller {

//访问地址 index.php?c=Member&a=index

public function indexAction(){

$this->display();

}

//访问地址 index.php?c=Member&a=login

public function loginAction(){

$this->display();

}

//访问地址 index.php?c=Member&a=register

public function registerAction(){

$this->display();

}

}

写在最后

最新消息,ThinkPHP 最新版本3.2.x 改正了这几点,Action类改名为Controller。网址中m参数改成了c参,变得直观易懂!

最后感言:几年来一直被MVC困扰,越是去研究ThinkPHP越是觉得一头雾水。一路走来,一路错,还好坚持了,不然真的被搞得彻底放弃了。(欢迎交流 by default7#zbphp.com)

------解决方案--------------------

称为 Action 而不是 Controller 是有道理的

Action 基类 完成了 Controller 的工作

而派生于 Action 的类完成的是  Model (业务模型)的工作

而 Model 类只是数据表的映射

其实认真看一下开发手册就都知道了,何苦要花4年时间?

------解决方案--------------------

愿楼主珍重

------解决方案--------------------

有这么难理解吗?

------解决方案--------------------

雖然菊花一緊,但是我還是認為樓主終於通靈而感到欣慰。

時間長短不要緊,重要的是你終於悟出來了

------解决方案--------------------

主要还是因为,thinkphp是“借鉴”SSH,在SSH里面的MVC就是这样命名的。

------解决方案--------------------

自己简单实现 下MVC整个流程就明白了。

新手也许就3个月一年才能实现。老手实现Thinkphp框架同样功能(mvc主要功能)。也就最多几天或者几个小时。

本php版主估计3小时就足够了吧。

ThinkPHP作者可是php顶尖高手。

ThinkPHP极为简单,而为极为强大,这者作者厉害的地方。

手册也非常完善方便。

------解决方案--------------------

你搞错了,thinkphp 2.x 也就是你说的什么action的,是最清晰的,代码也是最易懂得

现在的thinkphp 3.x,反而变得复杂不易懂了。

------解决方案--------------------

确实很多东西需要悟

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值