其他分享
首页 > 其他分享> > magento---什么时候使用virtul type?

magento---什么时候使用virtul type?

作者:互联网

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

 virtual types相当于magento为你创造的一个子类。这个子类是不独立存在的。

当然如果你自己创造一个concrete class也是可以解决virtual type的问题的。

virtualtype 在别的框架里是没有的。是magento的一个特性。

但是手动创建一个子类,然后再注入到新的类,这个在每个框架中都是可以这样写的。

所以什么时候用virtual和sub class呢?

sub class可以覆盖virtual type的所有功能,就是自己从家的concrete class肯定可以实现virtual的功能。但是virtual type只能实现一部分功能。不能实现完全扩展。

如果这个子类中还有其他的方法。那用virtual type就不一定能实现。

为何有别的方法virtual type就不能实现全部功能呢?

virtual type在哪些情况下可以用。具有哪些局限呢?

 

在2中,定义的是基础。定义好了api,model,repository,并且在dim.xml定义好了他们之间的依赖关系。2中没有viewtmodel。

在1中。是用virtual type来堆2中注入的model进行更改。用virtual type 创建了一个虚拟的repository,然后再注入到viewmodel内。 

如果不用virtual type,用concrete class

自己新建一个repository,并把扩展后的model注入近来。

然后再在dim。xml把这个自己定义的repository注入到viewmodel内。

 自己创建了实体类了。

这个和virtual type的区别在哪里?

virtual type只是依赖注入。替换掉构造函数那个类,那个类也许包含了数据。就是先沟通过构造函数替换掉传入这个类的数据。

但是如果需要再sub class内对这个数据进行一步简单的处理。后者或者再或者一些这个sub class 就是想或者一下这个repository,用virtual type是不行了的。这就需要用到的concrete class了。concrete class不仅能拥有virtual tpye的依赖注入到构造函数的功能,还能对这个sub class进行扩展和改写。

为何网上把vitual type 说成是type后那个类的虚拟sub class。现在可以理解的。的确是后面那个类的虚拟sub class。他的方法什么都有继承过来。只是在他的构造函数内注入了一个新的对象而已。相当于sub class 注入新的类,然后再传递给这个type后面的class。

就相当于这个。并且父类的所有方法都继承下来了。所以和subclass很像。

但是如果需要修改继承过来的方法,那就做不到了。需要用concrete sub class。

 

重写了父类的newWarehouse 方法。

在一个类中调用的不是本类的方法。1,要么是调动父类的方法。进行调用,或者进行改写。2,或者调用依赖注入过来对象内部的方法。

不会有其他方法出现。 

 

标签:sub,virtual,---,concrete,magento,type,class,注入
来源: https://blog.csdn.net/zwj900124/article/details/122011549