Phụ thuộc cứng là gì và phụ thuộc mềm là gì?


18

Trong Magento 2 (bất kỳ phiên bản ổn định nào), bạn có thể chạy lệnh này bin/magento info:dependencies:show-modulesvà bạn sẽ nhận được tệp csv trong thư mục gốc của ứng dụng được gọi modules-dependencies.csvvới tất cả các phụ thuộc mô-đun giống như sau:

nhập mô tả hình ảnh ở đây

Phụ thuộc cứng là gì và phụ thuộc mềm là gì? Một ví dụ về mỗi sẽ giúp.



@KetanKpBorada. Cảm ơn. Tài liệu đọc tốt, nhưng một ví dụ về cả phụ thuộc cứng và mềm sẽ giúp ích, Nếu bạn có một ví dụ như vậy, vui lòng đặt nó làm câu trả lời.
Marius

Câu trả lời:


13

Có ba trình phân tích cú pháp phụ thuộc khác nhau (triển khai Magento\Setup\Module\Dependency\ParserInterface):

  • code: tìm các lớp được sử dụng trong code
  • config / xml: tìm kiếm các phụ thuộc trong khai báo mô-đun
  • composer / json: tìm kiếm các phụ thuộc trong composer.json

Người duy nhất tạo ra sự khác biệt giữa các phụ thuộc cứng và mềm là trình phân tích cú pháp của trình soạn thảo (xem: Magento \ Setup \ Module \ Dependency \ Parser \ Composer \ Json :: extractDependencies () )

Một phụ thuộc mềm là một gói, được liệt kê trong "đề xuất", một phụ thuộc cứng một gói trong "yêu cầu".

Loại phụ thuộc mặc định là khó , điều đó có nghĩa là các phụ thuộc được tìm thấy bởi các trình phân tích cú pháp khác luôn luôn cứng (xem Magento \ Setup \ Module \ Dependency \ Báo cáo \ Dependency \ Data \ Dependency :: __ construc () ).


12

Một lời giải thích đơn giản và rõ ràng (từ khóa học cơ bản của Magento U):

Phụ thuộc cứng

Ngụ ý rằng một mô-đun không thể hoạt động mà không có các mô-đun khác phụ thuộc vào nó.

Ví dụ về phụ thuộc cứng bao gồm:

  • Mô-đun chứa mã sử dụng trực tiếp logic từ mô-đun khác (thể hiện, hằng lớp, phương thức tĩnh, thuộc tính lớp công khai, giao diện và đặc điểm).
  • Mô-đun chứa các chuỗi bao gồm tên lớp, tên phương thức, hằng số lớp, thuộc tính lớp, giao diện và đặc điểm từ mô-đun khác.
  • Mô-đun khử tuần tự hóa một đối tượng được khai báo trong mô-đun khác.
  • Mô-đun sử dụng hoặc sửa đổi các bảng cơ sở dữ liệu được sử dụng bởi mô-đun khác.

Magento_AdminNotification có một sự phụ thuộc cứng vào Magento_Store

Phụ thuộc mềm

Ngụ ý rằng một mô-đun có thể hoạt động mà không cần các mô-đun khác phụ thuộc vào nó.

Ví dụ về phụ thuộc mềm bao gồm:

  • Các mô-đun trực tiếp kiểm tra tính khả dụng của mô-đun khác.
  • Mô-đun mở rộng cấu hình của mô-đun khác.
  • Các mô-đun mở rộng bố trí của mô-đun khác.

Magento_AdvancedPricingImportExportcó một phụ thuộc mềm Magento_CatalogImportExportvới mã như thế này:

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

Nếu một mô-đun sử dụng mã từ một mô-đun khác, nó sẽ khai báo phụ thuộc một cách rõ ràng.

EDIT: chỉ nhận thấy rằng điều này cũng được giải thích rõ ràng trong tài liệu chính thức: https://devdocs.magento.com/guides/v2.3/arch architecture / archi_perspectives / component / modules / mod_depend.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.