Що таке жорстка залежність, а що м'яка залежність?


18

У Magento 2 (будь-яка стабільна версія) ви можете запустити цю команду, bin/magento info:dependencies:show-modulesі ви отримаєте файл csv у корені програми, який викликається modules-dependencies.csvз усіма залежностями модуля, який виглядає приблизно так:

введіть тут опис зображення

Що таке Жорстка залежність і що таке М'яка залежність? Приклад кожного допоможе.



@KetanKpBorada. Спасибі. Хороший матеріал для читання, але приклад важких і м'яких залежностей допоможе. Якщо у вас є такий приклад, будь ласка, поставте його як відповідь.
Маріус

Відповіді:


13

Існує три різні аналізатори залежності (реалізації Magento\Setup\Module\Dependency\ParserInterface):

  • код: шукає класи, що використовуються в коді
  • config / xml: шукає залежності в оголошенні модуля
  • composer / json: шукає залежності в composer.json

Єдиний, який розрізняє жорстку і м'яку залежності, - це композитор-аналізатор (див .: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extraDependitions () )

М'яка залежність являє собою пакет, перерахований в «запропонувати», в жорсткій залежності пакет в «вимагає».

Тип залежності за замовчуванням важкий , це означає, що залежності, знайдені іншими аналізаторами, завжди важкі (див. 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'
        )
    );
}

Якщо модуль використовує код з іншого модуля, він повинен чітко оголосити залежність.

EDIT: щойно помітив, що це також чітко пояснено в офіційному документі: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.