什么是池设计模式(pool design pattern)?----一次性启动多个object放到池中。
对象池模式, 或者称为对象池服务, 其意图为: 通过循环使用对象, 减少资源在初始化和释放时的昂贵损耗(这里的"昂贵"可能是时间效益(如性能), 也可能是空间效益(如并行处理), 在大多情况下, 指性能)
简单的说, 在需要时,从池中提取,不用时,放回池中,等待下一个请求. 典型的例子是连接池和线程池.
感觉有点像laravel的容器container。把所有需要用到的对象都放到container内,然后再用到的地方进行依赖注入。
laravel中,url中的参数分两种,一种是restful参数。一种是parma参数。
restful参数是在前台传递给路由router,然后调用route()方法传递给控制器,在控制器中的action用参数的形式来接收。
如果是params参数,直接在控制器中用依赖注入的Request来接收。
在magento中。传递restful参数,首先这个参数肯定在url中,get方式(url传递),然后参数到达路由。最后怎么到控制器???
在laravel中。这个request对象是不用传参的。是控制器可以直接获取到的。magento中需要传递才可以吗?
页面的参数可以用$block->getRequest()得到Request对象。是block获取的。
是页面把参数传递给控制器,还是控制器把参数传递给页面??
一个url的访问,都是先经过路由。再经过控制器,最后再由控制器来渲染页面。所以参数肯定是先到控制器,再到页面。
所以在magento中
url-->router-->controller--->layout.xml--->phtml--->block_class(内部注入viewmodel)
正常的laravel的流程是
controller从model拿到数据,并且提前知道了blade模板里需要什么数据。在action里把数据都准备好。然后再把数据return view(末班,数组)的形式,给到模板。
在magento中。控制器不提前知道模板需要什么数据,只是把模板的xml渲染。然后xml是由不同的phtml组成。phtml需要什么数据,然后再通知block这个class获取。不同的phtml,对应不同的class。block具体如何获取数据,是block的事,他可以注入viewmoel。再注入service。再注入model链接数据库获取数据,给phtml。
所以phtml需要什么东西,都是通过控制自己的$block来得到。
magento有自己的抛出异常机制。默认的错误也是用异常来抛出。这个和laravel是一样的。会自动把错误抛出来,这个不是php自动抛的,是magento这个系统来抛出来的。
当然你也可以自己定义,来抛出异常。和laravel一样,这样抛出的异常的页面比较丑。所以一般如果有问题,会用一个页面展示出来。而不是直接抛出异常。虽然两种处理的方式都是一个结果。
依赖注入有一个特点:就是你只要管你注入当前类的依赖。这个类自己的依赖它会自己去对应的地方找。不用你管。每一个类拿出来都是独立的。
这个类通过di.xml把其他的其余3个验证类,都注入到它的构造函数内了。并且在这个类中顶一个一个方法来调用每个验证类里的方法。
再把上面那个已经注入好的类,注入到这个viewmodel中。调用它的方法来实现验证。
这个就是池设计模式。
既然这个方法在定义的时候就设置了参数,所以在调用的时候,肯定需要自己传参数进去。这个方法最终是在phtml内调用的。
laravel中。request也是需要传递,只不过是路由传递。控制器方法是路由来调用的。这个参数是路由来传递的。有隐式传参。。传一个id,就可以得到一个orm。---->是路由通知系统来调用控制器内的方法。
--------->控制器中,所有的action都是由路由来调用。
控制器再去手动调用模型中的方法。
magento中。是反过来。路由也是调用控制器内部的方法。只是用来显示xml。不展示具体页面需要的数据。phtml需要什么数据,自己问block要。自己把参数传递给block。告诉block我要什么。
一个是主动给,一个是伸手要。
controller主动给数据。----laravel
phtml伸手问block要数据。-----magento
所以laravel的开发流程是,主要写控制器。
magento的开发流程是。先写phtml,再写block。这个phtml相当于啥???想一下。。。
本质上。laravel的模板引擎编译后也是问controller要数据的过程。也是各种php的代码。只不过laravel把这些php代码用{{}}包裹起来了。更加好看了。