什么是硬依赖性,什么是软依赖性?


18

在Magento 2(任何稳定的版本)中,您可以运行此命令,bin/magento info:dependencies:show-modules并且您将在应用程序的根目录中获得一个csv文件,该文件modules-dependencies.csv带有如下所示的所有模块依赖项:

在此处输入图片说明

什么是硬依赖性,什么是软依赖性?每个示例都有帮助。



@KetanKpBorada。谢谢。不错的阅读材料,但硬性和软性依赖性示例都将有所帮助。如果您有这样的示例,请作为答案。
Marius

Answers:


13

有三种不同的依赖项解析器(的实现Magento\Setup\Module\Dependency\ParserInterface):

  • 代码:查找代码中使用的类
  • config / xml:在模块声明中查找依赖项
  • composer / json:在composer.json中查找依赖项

区分硬依赖性和软依赖性的唯一一个是composer解析器(请参阅:Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies()

一个柔软的依赖是一个包,在“建议”,上市在“规定”的依赖包。

默认的依赖项类型是hard,这意味着其他解析器发现的依赖项总是很困难(请参阅Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct())。


12

一个简单明了的解释(来自Magento U基础课程):

硬依赖

表示一个模块如果没有其他模块就不能运行。

硬依赖性的示例包括:

  • 该模块包含直接使用另一个模块中的逻辑的代码(实例,类常量,静态方法,公共类属性,接口和特性)。
  • 该模块包含的字符串包括来自另一个模块的类名,方法名,类常量,类属性,接口和特征。
  • 该模块反序列化另一个模块中声明的对象。
  • 该模块使用或修改另一个模块使用的数据库表。

Magento_AdminNotification 对...有严格的依赖 Magento_Store

软依赖

表示一个模块可以在没有其他模块依赖的情况下运行。

软依赖项的示例包括:

  • 该模块直接检查另一个模块的可用性。
  • 该模块扩展了另一个模块的配置。
  • 该模块扩展了另一个模块的布局。

Magento_AdvancedPricingImportExport对以下Magento_CatalogImportExport代码有软依赖性:

if (!$model instanceof \Magento\CatalogImportExport\Model\Export\Product\Type\AbstractType) {
    throw new \Magento\Framework\Exception\LocalizedException(
        __(
            'Entity type model must be an instance of'
            . ' \Magento\CatalogImportExport\Model\Export\Product\Type\AbstractType'
        )
    );
}

如果一个模块使用另一个模块的代码,则应显式声明依赖关系。

编辑:刚刚注意到,这在官方文档中也有明确说明:https : //devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.