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
Magento\Cms\Block\Block
hàm tạo, một thể\Magento\Cms\Model\BlockFactory
hiện được sử dụng. Lớp đó không ở đâu trong mã. Nó chỉ được tìm thấy trongvar/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ự.