magento教程--如何使用池设计模式

本文介绍了池设计模式的概念,通过举例说明了其减少资源初始化和释放损耗的作用。同时,对比了Magento与Laravel中对象获取和依赖注入的差异。在Magento中,参数传递和数据获取过程与Laravel有所不同,更强调Block类的作用。文章还探讨了两个框架中异常处理的相似性和开发流程的异同。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

视频地址;https://www.youtube.com/watch?v=zbacPEMBSSs&list=PL9Q0S-CmtAhJVjwnK5ip6H84sCuRQcACY&index=26

什么是池设计模式(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代码用{{}}包裹起来了。更加好看了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值