強い依存関係とは何か、弱い依存関係とは何ですか?


18

Magento 2(任意の安定バージョン)では、このコマンドbin/magento info:dependencies:show-modulesを実行できます。アプリケーションのルートにあるcsvファイルを取得し、modules-dependencies.csv次のようなすべてのモジュールの依存関係を呼び出します。

ここに画像の説明を入力してください

ハード依存関係とは何ですか?ソフト依存関係とは何ですか?それぞれの例が役立ちます。



しょーた ありがとう。良い読み物ですが、ハード依存性とソフト依存性の両方の例が役立ちます。そのような例がある場合は、答えとしてください。
マリウス

回答:


13

3つの異なる依存関係パーサー(の実装Magento\Setup\Module\Dependency\ParserInterface)があります。

  • コード:コードで使用されるクラスを探します
  • config / xml:モジュール宣言で依存関係を探します
  • composer / json:composer.jsonで依存関係を探します

ハード依存とソフト依存を区別する唯一のものは、コンポーザーパーサーです(Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies()を参照)

ソフト依存関係は、「提案」に記載されているパッケージですハード「必要」に依存パッケージを。

デフォルトの依存関係タイプはhardです。つまり、他のパーサーによって検出された依存関係は常にハードです(Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct()を参照)。


12

簡単で明確な説明(Magento U基礎コースから):

ハード依存

ことを意味し、モジュールがないことができ、それが依存している他のモジュールなしで機能します。

ハード依存関係の例は次のとおりです。

  • モジュールには、別のモジュールのロジック(インスタンス、クラス定数、静的メソッド、パブリッククラスプロパティ、インターフェイス、および特性)を直接使用するコードが含まれています
  • モジュールには、クラス名、メソッド名、クラス定数、クラスプロパティ、インターフェイス、および別のモジュールからの特性を含む文字列が含まれています。
  • モジュールは、別のモジュールで宣言されたオブジェクトを逆シリアル化します。
  • モジュールは、別のモジュールが使用するデータベーステーブルを使用または変更します。

Magento_AdminNotification に強く依存している Magento_Store

ソフト依存

ことを意味し、モジュールができ、それが依存している他のモジュールなしで機能します。

ソフト依存関係の例は次のとおりです。

  • モジュールは、別のモジュールの可用性を直接確認します。
  • モジュールは、別のモジュールの構成を拡張します。
  • モジュールは、別のモジュールのレイアウトを拡張します。

Magento_AdvancedPricingImportExport次のMagento_CatalogImportExportようなコードでソフトに依存しています:

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

モジュールが別のモジュールのコードを使用する場合、依存関係を明示的に宣言する必要があります。

編集:これは公式ドキュメントでも明確に説明されていることに気づいた:https : //devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.