大家对WEB开发的MVC的理解吧?


YII中的Action层,除了解耦动作,使代码复用,在MVC中充当的是哪一块的角色?

php-框架 yii yii2 php

霜是月魂魄 10 years, 7 months ago

action方法是一个个动作,属于控制器;
Yii框架用的很标准的MVC模型,action所属的类都继承自Controller:


 class TracerController extends Controller
{
    public function actionIndex()
    {
        $this->render('index');
    }
}

楼主请百度:yii权威指南 pdf
很薄的一本册子,将MVC讲的很清楚;

伊吹哈密瓜 answered 10 years, 7 months ago

asdgea answered 10 years, 7 months ago

Controller呗。

帝国屠刀98k answered 10 years, 7 months ago

没有用过YII,但是MVC基本上都是那个路子。action应该是控制器吧,一般来说控制器最好是做请求的分发和输出,最好不要在action中做任何处理。可以这么理解,一个项目就是一个餐厅,action是服务员,他的工作就是接收客人的要求,然后传达给厨师,厨师做好菜,服务员再端回来给客人,就这么多。但是这里面会涉及问题,比如说客人点的是炖菜,服务员应该去告诉做炖菜的厨师A,客人要甜点,服务员应该去通知糕点师B。要是餐厅的菜品一多,服务员就不得不记住很多对应关系,也就是说传达请求的逻辑很复杂。要是服务员生病请假了,临时找个人来替代是很难的,因为这个活很复杂,这就对应我们对代码里修改或者加功能一样。要是我们的action写得很复杂,改代码是非常痛苦的,甚至很可能为了加一点新的小功能导致整个程序编译失败。

所以现在的大餐厅,服务员基本上都是用一个机器给生成订单,然后由机器来通知各个厨师。这样的好处就是,服务员的工作就变得很简单了,要找个新的服务员也非常容易。这个行为对应在MVC的架构里面也是非常常用的,叫做委托。就是说,action收到请求,只需要做一个简单的处理,然后委托给一个专门的model来进行更进一步的请求分发和过滤,由这个model再去调真正的处理程序。这个被委托来做分发的model是属于M层的。

我们的许多设计模式也是使用在M层,比如做分发的model实现一个工厂模式或者策略模式等等,这些都是在M层的处理,action是C层的,尽量让action保持简洁。类比来说,尽量让服务员少管业务,更多的精力放在给顾客的服务上,action更注重的就是做好用户的接口。

咏梦D沙发君 answered 10 years, 7 months ago

Your Answer