magento教程---如何使用 virtual types

视频地址:

https://www.youtube.com/watch?v=DiAS3vE6OO4&list=PL9Q0S-CmtAhJVjwnK5ip6H84sCuRQcACY&index=28

virtual types 实现了依赖注入的无限嵌套。并且不用创建出实际的类,用di.xml创建出虚拟类。 

 magento教程---如何使用 virtual types

这个对象,是把一个数组转换成一个对象。然后获取数组的value,就可以用$object->key这样的形式了。

数据访问层  repository

repository位于model和block之间,在magento中。repository位于model和viewmodel之间。

magento教程---如何使用 virtual types 

model  repository service viewmodel block 分别干嘛的?

 model链接数据库。得到orm------->基础数据

repository会对你真实想要的数据进行进一步的处理。----->加工好的数据

service  ------->晚点补充

viewmodel----->注入到block,真实的和phtml进行交互。从repository得到加工好的数据,然后供页面调用。页面是不会调用repository的。也是直接得到phtml传递过来的参数。---->只写被phtml直接调用的方法。其他的东西都注入到构造函数内。

block  --->页面真实调用phtml。不过业务逻辑都是给注入的viewmodel来实现了。自己一般不干活了。

层与层之间的链接都是用依赖注入。把上一层的对象注入到自己的构造函数内,然后进行初始化。

原则上,不跨层。本层只注入上一层,然后得到数据。

层与层之间传递的是啥?传递的是对象。是那个依赖注入到构造函数内的对象。这个对象里包含属性和方法。属性里也许存了数据。

但是真实调用,应该是倒过来的过程

magento教程---如何使用 virtual types这个过程来调用,通过phtml里传递参数,然后一级一级调用。 

magento教程---如何使用 virtual types

interface一般放在api这个目录里。

注入,是依赖关系,所以一般是不是都需要跨层,而且跨的是相邻的两个层??

这个似乎个猜想,同层的是不是不用依赖注入?他们相互不用去依赖??也是猜测

magento教程---如何使用 virtual types 因为最终是要注入到viewmodel层的。。这个是为什么?因为viewmodel是直接和phtml交互的,是和用户的输入交互的。phtml调用viewmodel。用户手动输入调用的是viewmodel。

因为重新写了一个model层的数据。把model层注入到repository层。得到一个新的repository。然后再把这个repository注入到viewmodel层。注入的都是对象,是一个完整的可以获取数据的链路。

最终是要根据phtml中或者url中,传递的参数去数据库里获取数据的。如果传商品id这些。所以参数在phtml传递给viewmodel后,要一直传递给repository,再传递给model。再调用数据库。所以每一个方法内都要有这个传递的参数才可以。

magento教程---如何使用 virtual types

这个是model层,相当于离数据库最近的层,这个参数肯定是通过前端传过来的。就是通过phtml一层一层传递过来的。所以每层都需要传递一个参数。 

 

magento教程---如何使用 virtual types

 最终要得到数据。然后再把数据显示到页面。

什么时候用preference和virtual types:

如果你想让所有类中的都变化,那就用preference,

如果只想让某一个页面参数变化,或者某一个类产生变化,那就用virtual type,因为他可以指定具体某个类来进行注入。

 

上一篇:五一训练A-1


下一篇:【Android面试题】ViewModel源码分析,在什么情况下的「销毁重建」能够对数据进行无缝恢复?