Cập nhật thay đổi lớn từ Magento 2.4 - Magento 2.5: Decomposition of Magento Controllers

Như mọi người đã biết, Magento chuẩn bị cho ra mắt magento 2.4. Đây là một bản cập nhật lớn, vì vậy có rất nhiều thay đổi về kiến trúc. Mình xin giới thiệu 1 thay đổi có thể nói là khá lớn trong Magento, đó là việc “Decomposition of Magento Controllers”

Mọi người hãy xem hình sau:

Như truyền thống, toàn bộ Controller trong Magento sẽ phải kế thừa từ Class AbstractAction. Điều này khiến cho mặc dù ta tạo 1 controller rất đơn giản, ví dụ chỉ in ra màn hình chữ Hello World thôi, ta phải kế thừa từ class AbstractAction. Class này thì nó có khai báo class sau trong contructor : \Magento\Framework\App\Action\Context

Class context này sẽ khiến tốc độ xử lý của Action bị giảm đi do nó có chứa khá nhiều dependency:

 /**
     * @param \Magento\Framework\App\RequestInterface $request
     * @param \Magento\Framework\App\ResponseInterface $response
     * @param \Magento\Framework\ObjectManagerInterface $objectManager
     * @param \Magento\Framework\Event\ManagerInterface $eventManager
     * @param \Magento\Framework\UrlInterface $url
     * @param \Magento\Framework\App\Response\RedirectInterface $redirect
     * @param \Magento\Framework\App\ActionFlag $actionFlag
     * @param \Magento\Framework\App\ViewInterface $view
     * @param \Magento\Framework\Message\ManagerInterface $messageManager
     * @param \Magento\Framework\Controller\Result\RedirectFactory $resultRedirectFactory
     * @param \Magento\Framework\Controller\ResultFactory $resultFactory
     */

Theo cơ chế mới này, class sẽ không còn phải kế thừa từ AbstractAction => Tốc độ xử lý controller sẽ nhanh hơn đáng kể:

Ngoài ra, việc không còn kế thừa từ AbstractAction cũng khiến việc viết UnitTest dễ dàng hơn khi không cần phải Mockup quá nhiều từ Context.

Hiện tại Magento đang Migrate toàn bộ Controller sang cơ chế mới. Dự kiến Magento 2.4 sẽ áp dụng cơ chế mới này và deprecated toàn bộ cách dùng cũ (vẫn cho dùng nhưng không khuyến cáo). Bắt đầu từ Magento 2.5, toàn bộ việc kế thừa từ AbstractAction sẽ không còn được dùng.

  • 2.4.0 - we give working mechanism and deprecate the old approach with inheritance
  • 2.5.0 - we remove inheritance from core controllers

Như vậy, Magento 2.4 sẽ là điều kiện để mọi người thích nghi với cơ chế mới, trước khi chính thức sử dụng hoàn toàn vào Magento 2.5.

Cảm ơn mọi người đã theo dõi :))

8 Likes

Sản phầm mình bị ảnh lớn bởi bạn này 0 em, có cần thiết phải line product khác?

1 Like

Em nghĩ làm line sản phẩm khác thì mình sẽ dùng cơ chế mới luôn. Như vậy sản phẩm không bị outdate + khi lên 2.5 sẽ dễ dàng hơn rất nhiều.

1 Like

Content quan trọng ntn, Eden làm video đi?

Vậy cũng cần question 1 câu hỏi nữa, cần mọi người nghiên cứu @alex @steve @riley
Với line POS 3x ta sẽ như thế nào?

  • Keep như hiện tại chỉ fix bug hay phát triển tiếp tính năng? Nếu quyết định ngừng phát triển tính năng và tương lai cũng có thể ngừng fix bug, thì cũng cần có thời hạn công bố trước việc dừng hẳn phát triển, dừng maintain, dừng support, hoặc chí ít cũng update agreement là tuân theo cycle của Magento 2.2
  • Cơ chế Upgrade từ POS 3x 4x lên các dòng 5x
1 Like
  1. Với 3.x em nghĩ mình sẽ dừng phát triển tính năng, khách yêu cầu thêm gì thì customize ạ. Còn những chính sách support, upgrade các line thì mình sẽ họp để finalize.
  2. Có một điều nữa là liên quan đến roadmap của các version mới, vì e thấy 2.4 sẽ Improve tính năng Low stock + add thêm store-pick up thì có thể ảnh hưởng đến những phần mình đang làm phát triển sản phẩm.
1 Like