¿Qué es una dependencia dura y qué es una dependencia blanda?

18

En Magento 2 (cualquier versión estable) puede ejecutar este comando bin/magento info:dependencies:show-modulesy obtendrá un archivo csv en la raíz de su aplicación llamada modules-dependencies.csvcon todas las dependencias del módulo que se ve así:

ingrese la descripción de la imagen aquí

¿Qué es una dependencia Hard y qué es una dependencia Soft? Un ejemplo de cada uno ayudaría.

Marius
fuente
@KetanKpBorada. Gracias. Un buen material de lectura, pero un ejemplo de dependencias tanto duras como blandas ayudaría. Si tiene ese ejemplo, por favor póngalo como respuesta.
Marius

Respuestas:

13

Hay tres analizadores de dependencias diferentes (implementaciones de Magento\Setup\Module\Dependency\ParserInterface):

  • código: busca las clases utilizadas en el código
  • config / xml: busca dependencias en la declaración del módulo
  • composer / json: busca dependencias en composer.json

El único que hace una distinción entre dependencias duras y blandas es el analizador de compositor (ver: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Una dependencia blanda es un paquete, que se enumera en "sugerir", una dependencia dura que un paquete "requiere".

El tipo de dependencia predeterminado es difícil , lo que significa que las dependencias encontradas por los otros analizadores son siempre difíciles (vea Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
fuente
12

Una explicación simple y clara (del curso de fundamentos de Magento U):

Dependencia dura

Implica que un módulo no puede funcionar sin los otros módulos de los que depende.

Ejemplos de dependencias duras incluyen:

  • El módulo contiene código que usa directamente la lógica de otro módulo (instancias, constantes de clase, métodos estáticos, propiedades de clase pública, interfaces y rasgos).
  • El módulo contiene cadenas que incluyen nombres de clases, nombres de métodos, constantes de clase, propiedades de clase, interfaces y rasgos de otro módulo.
  • El módulo deserializa un objeto declarado en otro módulo.
  • El módulo usa o modifica las tablas de la base de datos utilizadas por otro módulo.

Magento_AdminNotification tiene una fuerte dependencia de Magento_Store

Dependencia suave

Implica que un módulo puede funcionar sin los otros módulos de los que depende.

Los ejemplos de dependencias suaves incluyen:

  • El módulo verifica directamente la disponibilidad de otro módulo.
  • El módulo extiende la configuración de otro módulo.
  • El módulo extiende el diseño de otro módulo.

Magento_AdvancedPricingImportExporttiene una dependencia suave Magento_CatalogImportExportcon código como este:

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 módulo usa código de otro módulo, debe declarar la dependencia explícitamente.

EDITAR: acabo de notar que esto también se explica claramente en el documento oficial: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael en Digital Pianism
fuente