Apa itu ketergantungan keras dan apa itu ketergantungan lunak?

18

Di Magento 2 (versi stabil apa pun) Anda dapat menjalankan perintah ini bin/magento info:dependencies:show-modulesdan Anda akan mendapatkan file csv di root aplikasi yang dipanggil modules-dependencies.csvdengan semua dependensi modul yang terlihat seperti ini:

masukkan deskripsi gambar di sini

Apa itu ketergantungan Hard dan apa itu Soft dependency? Contoh masing-masing akan membantu.

Marius
sumber
@KetanKpBorada. Terima kasih. Bahan bacaan yang baik, tetapi contoh dari dependensi keras dan lunak akan membantu, Jika Anda memiliki contoh seperti itu, harap cantumkan sebagai jawaban.
Marius

Jawaban:

13

Ada tiga parser dependensi yang berbeda (implementasi dari Magento\Setup\Module\Dependency\ParserInterface):

  • kode: mencari kelas yang digunakan dalam kode
  • config / xml: mencari dependensi dalam deklarasi modul
  • composer / json: mencari dependensi di composer.json

Satu-satunya yang membuat perbedaan antara hard dan soft dependency adalah komposer parser (lihat: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Sebuah lembut ketergantungan adalah paket, yang tercantum dalam "menyarankan", sebuah keras ketergantungan paket di "membutuhkan".

Tipe dependensi default sulit , itu berarti dependensi yang ditemukan oleh parser lain selalu sulit (lihat Magento \ Setup \ Module \ Dependency \ Report \ Dependency \ Data \ Dependency :: __ construct () ).

Fabian Schmengler
sumber
12

Penjelasan yang sederhana dan jelas (dari kursus dasar Magento U):

Ketergantungan yang keras

Menyiratkan bahwa modul tidak dapat berfungsi tanpa modul lain yang menjadi sandarannya .

Contoh dependensi keras meliputi:

  • Modul ini berisi kode yang secara langsung menggunakan logika dari modul lain (instance, konstanta kelas, metode statis, properti kelas publik, antarmuka dan sifat-sifat).
  • Modul ini berisi string yang menyertakan nama kelas, nama metode, konstanta kelas, properti kelas, antarmuka, dan ciri-ciri dari modul lain.
  • Modul menderialisasi sebuah objek yang dideklarasikan dalam modul lain.
  • Modul ini menggunakan atau memodifikasi tabel database yang digunakan oleh modul lain.

Magento_AdminNotification memiliki ketergantungan yang sulit pada Magento_Store

Ketergantungan lembut

Menyiratkan bahwa suatu modul dapat berfungsi tanpa modul lain yang menjadi sandarannya .

Contoh ketergantungan lunak meliputi:

  • Modul secara langsung memeriksa ketersediaan modul lain.
  • Modul ini memperluas konfigurasi modul lain.
  • Modul ini memperluas tata letak modul lain.

Magento_AdvancedPricingImportExportmemiliki ketergantungan lunak Magento_CatalogImportExportdengan kode seperti ini:

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

Jika suatu modul menggunakan kode dari modul lain, itu harus menyatakan ketergantungan secara eksplisit.

EDIT: perhatikan bahwa ini juga dijelaskan dengan jelas dalam dokumen resmi: https://devdocs.magento.com/guides/v2.3/architecture/archi_perspectives/components/modules/mod_depend.html

Raphael di Digital Pianism
sumber