Czym jest twarda zależność, a jaka miękka zależność?

18

W Magento 2 (dowolna stabilna wersja) możesz uruchomić to polecenie, bin/magento info:dependencies:show-modulesa otrzymasz plik csv w katalogu głównym aplikacji nazywany modules-dependencies.csvwszystkimi zależnościami modułu, które wyglądają tak:

wprowadź opis zdjęcia tutaj

Co to jest zależność twarda, a co zależność miękka? Przykład każdego z nich by pomógł.

Marius
źródło
2
sprawdź, czy może to pomóc devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/...
Ketan Borada
@KetanKpBorada. Dzięki. Dobry materiał do czytania, ale pomoże zarówno przykład twardych, jak i miękkich zależności. Jeśli masz taki przykład, proszę podaj go jako odpowiedź.
Marius

Odpowiedzi:

13

Istnieją trzy różne parsery zależności (implementacje Magento\Setup\Module\Dependency\ParserInterface):

  • code: szuka klas używanych w kodzie
  • config / xml: szuka zależności w deklaracji modułu
  • composer / json: szuka zależności w composer.json

Jedynym, który odróżnia twarde i miękkie zależności, jest parser kompozytora (patrz: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Miękki uzależnienie to pakiet, wymienione w „sugerować”, w twardej uzależnienia pakiet w „wymagają”.

Domyślny typ zależności jest trudny , co oznacza, że ​​zależności znalezione przez inne parsery są zawsze trudne (patrz Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
źródło
12

Proste i jasne wyjaśnienie (z kursu podstaw Magento U):

Ciężka zależność

Oznacza, że moduł nie może działać bez innych modułów, od których jest zależny.

Przykładem twardych zależności są:

  • Moduł zawiera kod, który bezpośrednio wykorzystuje logikę z innego modułu (instancje, stałe klas, metody statyczne, właściwości klasy publicznej, interfejsy i cechy).
  • Moduł zawiera łańcuchy zawierające nazwy klas, nazwy metod, stałe klas, właściwości klas, interfejsy i cechy z innego modułu.
  • Moduł dokonuje serializacji obiektu zadeklarowanego w innym module.
  • Moduł używa lub modyfikuje tabele bazy danych używane przez inny moduł.

Magento_AdminNotification ma silną zależność od Magento_Store

Miękka zależność

Oznacza, że moduł może działać bez innych modułów, od których jest zależny.

Przykład miękkich zależności obejmuje:

  • Moduł bezpośrednio sprawdza dostępność innego modułu.
  • Moduł rozszerza konfigurację innego modułu.
  • Moduł rozszerza układ innego modułu.

Magento_AdvancedPricingImportExportma miękką zależność od Magento_CatalogImportExporttakiego kodu:

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'
        )
    );
}

Jeśli moduł używa kodu z innego modułu, powinien jawnie zadeklarować zależność.

EDYCJA: właśnie zauważyłem, że jest to również wyjaśnione w oficjalnym dokumencie: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael at Digital Pianism
źródło