Was ist eine harte Abhängigkeit und was ist eine weiche Abhängigkeit?

18

In Magento 2 (jede stabile Version) können Sie diesen Befehl ausführen, bin/magento info:dependencies:show-modulesund Sie erhalten im Stammverzeichnis Ihrer Anwendung eine CSV-Datei modules-dependencies.csvmit allen Modulabhängigkeiten, die folgendermaßen aussehen:

Bildbeschreibung hier eingeben

Was ist eine harte Abhängigkeit und was ist eine weiche Abhängigkeit? Ein Beispiel von jedem würde helfen.

Marius
quelle
2
Überprüfen Sie, ob dies hilfreich ist devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/…
Ketan Borada
@KetanKpBorada. Vielen Dank. Gutes Lesematerial, aber ein Beispiel für harte und weiche Abhängigkeiten würde helfen. Wenn Sie ein solches Beispiel haben, geben Sie es bitte als Antwort.
Marius

Antworten:

13

Es gibt drei verschiedene Abhängigkeitsparser (Implementierungen von Magento\Setup\Module\Dependency\ParserInterface):

  • Code: Sucht nach Klassen, die im Code verwendet werden
  • config / xml: sucht nach Abhängigkeiten in der Moduldeklaration
  • composer / json: Sucht nach Abhängigkeiten in composer.json

Die einzige, die zwischen harten und weichen Abhängigkeiten unterscheidet, ist der Composer-Parser (siehe: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () ).

Eine weiche Abhängigkeit ist ein Paket, das in "suggest" aufgeführt ist, eine harte Abhängigkeit ein Paket in "require".

Der Standardtyp für Abhängigkeiten ist hard , das heißt, die von den anderen Parsern gefundenen Abhängigkeiten sind immer hard (siehe Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
quelle
12

Eine einfache und klare Erklärung (aus dem Magento U-Grundlagenkurs):

Harte Abhängigkeit

Impliziert, dass ein Modul ohne die anderen Module, von denen es abhängt, nicht funktionieren kann .

Beispiele für harte Abhängigkeiten sind:

  • Das Modul enthält Code, der direkt die Logik eines anderen Moduls verwendet (Instanzen, Klassenkonstanten, statische Methoden, Eigenschaften öffentlicher Klassen, Schnittstellen und Merkmale).
  • Das Modul enthält Zeichenfolgen, die Klassennamen, Methodennamen, Klassenkonstanten, Klasseneigenschaften, Schnittstellen und Merkmale eines anderen Moduls enthalten.
  • Das Modul deserialisiert ein Objekt, das in einem anderen Modul deklariert wurde.
  • Das Modul verwendet oder ändert die Datenbanktabellen, die von einem anderen Modul verwendet werden.

Magento_AdminNotification hat eine harte Abhängigkeit von Magento_Store

Weiche Abhängigkeit

Impliziert, dass ein Modul ohne die anderen Module funktionieren kann, von denen es abhängt.

Beispiele für weiche Abhängigkeiten sind:

  • Das Modul prüft direkt die Verfügbarkeit eines anderen Moduls.
  • Das Modul erweitert die Konfiguration eines anderen Moduls.
  • Das Modul erweitert das Layout eines anderen Moduls.

Magento_AdvancedPricingImportExporthat eine weiche Abhängigkeit von Magento_CatalogImportExportmit Code wie folgt:

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

Wenn ein Modul Code aus einem anderen Modul verwendet, sollte es die Abhängigkeit explizit deklarieren.

BEARBEITEN: gerade bemerkt, dass dies auch im offiziellen Dokument deutlich erklärt wird: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael bei Digital Pianism
quelle