Qu'est-ce qu'une dépendance dure et qu'est-ce qu'une dépendance douce?

18

Dans Magento 2 (toute version stable), vous pouvez exécuter cette commande bin/magento info:dependencies:show-moduleset vous obtiendrez un fichier csv à la racine de votre application appelé modules-dependencies.csvavec toutes les dépendances du module qui ressemble à ceci:

entrez la description de l'image ici

Qu'est-ce qu'une dépendance dure et qu'est-ce qu'une dépendance douce? Un exemple de chacun aiderait.

Marius
la source
2
vérifiez que cela peut aider devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/…
Ketan Borada
@KetanKpBorada. Merci. Bon matériel de lecture, mais un exemple de dépendances matérielles et logicielles serait utile. Si vous avez un tel exemple, veuillez le mettre comme réponse.
Marius

Réponses:

13

Il existe trois analyseurs de dépendance différents (implémentations de Magento\Setup\Module\Dependency\ParserInterface):

  • code: recherche les classes utilisées dans le code
  • config / xml: recherche les dépendances dans la déclaration du module
  • composer / json: recherche les dépendances dans composer.json

Le seul qui fait une distinction entre les dépendances matérielles et logicielles est l'analyseur compositeur (voir: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Une douce dépendance est un paquet, dans la liste « suggérer », un dur dépendance dans un paquet « exiger ».

Le type de dépendance par défaut est hard , ce qui signifie que les dépendances trouvées par les autres analyseurs sont toujours dures (voir Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
la source
12

Une explication simple et claire (du cours sur les principes fondamentaux de Magento U):

Forte dépendance

Implique qu'un module ne peut pas fonctionner sans les autres modules dont il dépend.

Exemple de dépendances matérielles:

  • Le module contient du code qui utilise directement la logique d'un autre module (instances, constantes de classe, méthodes statiques, propriétés de classe publique, interfaces et traits).
  • Le module contient des chaînes qui incluent les noms de classe, les noms de méthodes, les constantes de classe, les propriétés de classe, les interfaces et les traits d'un autre module.
  • Le module désérialise un objet déclaré dans un autre module.
  • Le module utilise ou modifie les tables de base de données utilisées par un autre module.

Magento_AdminNotification a une forte dépendance sur Magento_Store

Dépendance douce

Implique qu'un module peut fonctionner sans les autres modules dont il dépend.

Voici quelques exemples de dépendances logicielles:

  • Le module vérifie directement la disponibilité d'un autre module.
  • Le module étend la configuration d'un autre module.
  • Le module étend la disposition d'un autre module.

Magento_AdvancedPricingImportExporta une dépendance douce Magento_CatalogImportExportavec du code comme celui-ci:

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

Si un module utilise le code d'un autre module, il doit déclarer la dépendance explicitement.

EDIT: vient de remarquer que cela est également clairement expliqué dans le document officiel: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael chez Digital Pianism
la source