Простое и понятное объяснение (из основного курса 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