O que é uma dependência difícil e o que é uma dependência suave?

18

No Magento 2 (qualquer versão estável), você pode executar este comando bin/magento info:dependencies:show-modulese obterá um arquivo csv na raiz do seu aplicativo chamado modules-dependencies.csvcom todas as dependências do módulo que se parecem com isso:

insira a descrição da imagem aqui

O que é uma dependência Hard e o que é uma dependência Soft? Um exemplo de cada um ajudaria.

Marius
fonte
2
verifique se ele pode ajudar devdocs.magento.com/guides/v2.0/architecture/archi_perspectives/…
Ketan Borada
@KetanKpBorada. Obrigado. Bom material de leitura, mas um exemplo de dependências rígidas e flexíveis ajudaria. Se você tiver um exemplo, coloque-o como resposta.
Marius

Respostas:

13

Existem três analisadores de dependência diferentes (implementações de Magento\Setup\Module\Dependency\ParserInterface):

  • código: procura por classes usadas no código
  • config / xml: procura dependências na declaração do módulo
  • compositor / json: procura dependências em composer.json

O único que faz uma distinção entre dependências físicas e eletrônicas é o analisador do compositor (consulte: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Uma dependência leve é um pacote, listado em "sugerir", uma dependência difícil que um pacote em "requer".

O tipo de dependência padrão é difícil , o que significa que as dependências encontradas pelos outros analisadores são sempre difíceis (consulte Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
fonte
12

Uma explicação simples e clara (do curso de fundamentos do Magento U):

Dependência total

Implica que um módulo não pode funcionar sem os outros módulos dos quais depende.

Exemplos de dependências físicas incluem:

  • O módulo contém código que usa diretamente a lógica de outro módulo (instâncias, constantes de classe, métodos estáticos, propriedades de classe pública, interfaces e características).
  • O módulo contém seqüências de caracteres que incluem nomes de classe, nomes de métodos, constantes de classe, propriedades de classe, interfaces e características de outro módulo.
  • O módulo desserializa um objeto declarado em outro módulo.
  • O módulo usa ou modifica as tabelas de banco de dados usadas por outro módulo.

Magento_AdminNotification tem uma forte dependência de Magento_Store

Dependência suave

Implica que um módulo pode funcionar sem os outros módulos dos quais depende.

Exemplos de dependências simples:

  • O módulo verifica diretamente a disponibilidade de outro módulo.
  • O módulo estende a configuração de outro módulo.
  • O módulo estende o layout de outro módulo.

Magento_AdvancedPricingImportExporttem uma dependência suave de Magento_CatalogImportExportcó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'
        )
    );
}

Se um módulo usa código de outro módulo, ele deve declarar a dependência explicitamente.

EDIT: observei que isso também é explicado claramente no documento oficial: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael na Digital Pianism
fonte