Những lớp (loại) nào được tạo trong Magento 2?


9

Trong Magento 2 có một tập hợp các lớp được tạo tự động và được lưu trữ var/generationvà chúng được sử dụng trong mã lõi.
Trong khi cố gắng tạo một mô-đun tùy chỉnh bằng cách sao chép một trong các mô-đun cốt lõi, tôi thấy rằng đối với mô-đun của tôi cũng có một số lớp được tạo.
Trong các lớp được tạo, tôi đã thấy các proxy, đánh chặn, nhà máy ....

Có một danh sách đầy đủ các lớp hoặc loại lớp được tạo tự động không?
Và như câu hỏi phụ ... khi nào / chúng được tạo ra ở đâu?

Câu trả lời:


9

Có nhiều lý do khác nhau để tạo các thực thể khác nhau:

Proxy - nó được sử dụng để tải lười biếng. Nhưng mỗi loại yêu cầu lớp proxy riêng biệt, điều đó sẽ gây khó chịu cho các nhà phát triển khi viết chúng theo cách thủ công để Magento tạo ra chúng. Yo sẽ chỉ tìm thấy các tham chiếu đến Proxy trong di.xml

Factory - là một lớp được sử dụng để tạo ra các tệp không thể tiêm (thực thể). Giống như proxy. PHP chưa có khái quát, vì vậy chúng tôi tự động tạo các nhà máy không để nhà phát triển viết mã soạn sẵn. Bạn sẽ tương tác với các nhà máy trên mã Magento. Hầu hết có lẽ bạn sẽ yêu cầu các nhà máy của riêng bạn cho các thực thể của bạn. Chỉ cần yêu cầu nhà máy tương ứng trong constructor và nó sẽ được tạo trong lần chạy tiếp theo hoặc trong quá trình chạy trình biên dịch.

Interceptor - là một lớp cơ sở hạ tầng, được sử dụng bởi thành phần Interception. Vì Flyingmana và Phil Winkle nhận thấy bạn không nên tương tác với họ bằng mọi cách.

Có một loạt các thực thể khác được tạo ra (như Logger cho chế độ lược tả biểu đồ đối tượng) nhưng 3 thực thể này là quan trọng nhất.

Magento 2 cũng có thể được biên dịch. Việc biên dịch làm cho DI và Đánh chặn nhanh hơn. Tất cả việc tạo và biên dịch mã có thể được thực hiện với dev / tools / Magento / Tools / Di / Trình biên dịch.php


2

Từ khái niệm:

Bạn không cần biết loại lớp nào được tạo tự động, vì bạn không bao giờ phải chạm hoặc sử dụng chúng, thậm chí bạn không nên.

Chúng được tạo (tĩnh?) Được tạo khi đang bay, nhưng sau đó sẽ được tạo thông qua lệnh cli hoặc tương tự.

Danh sách các loại tồn tại có thể phát triển bất cứ lúc nào, khi các bộ phận nội bộ có nhu cầu về một loại mới. Nhưng việc truy cập vào chúng sẽ luôn xảy ra ẩn sau các API tài liệu thông thường (thường được gọi là các lệnh gọi hàm)


1
Tôi không chắc chắn về "hoặc sử dụng chúng". Dưới đây là một ví dụ: Trong Magento\Cms\Block\Blockhàm tạo, một thể \Magento\Cms\Model\BlockFactoryhiện được sử dụng. Lớp đó không ở đâu trong mã. Nó chỉ được tìm thấy trong var/generation. Vì vậy, nếu tôi đang làm một mô-đun tương tự, tôi có thể phải sử dụng một lớp tương tự.
Marius

2

Đây là cách Magento tạo ra cách tiếp cận hướng theo khía cạnh cho nền tảng mới; bằng cách thực sự tạo ra các "sự kiện" trước, xung quanh và sau "thay vì tự động gửi chúng đi. Điều này tạo ra sự cân bằng thuận tiện cho lập trình viên và hiệu suất cho nền tảng.

Một số kỹ thuật như tiêm phụ thuộc tự động được làm phẳng vào các lớp được tạo thay vì được thực hiện thông qua phản xạ - một lần nữa - đây là một kỹ thuật để cải thiện hiệu suất.


Cảm ơn đã giải thích "tại sao?", Nhưng câu hỏi chính của tôi là "cái gì?" và ở đâu?".
Marius
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.