Object Manager là một phần quan trọng trong hệ thống của Magento 2. Vậy Object Manager là gì? Cách thức hoạt động và sức ảnh hưởng như thế nào. Chúng ta cùng tìm hiểu bài viết này nhé!
Object Manager là gì?
Object Manager là một thành phần cốt lõi trong Magento 2, được sử dụng để khởi tạo và quản lý các đối tượng (object) trong hệ thống.
Nó là một container (bộ lưu trữ) cho các đối tượng, cung cấp cho các class khác và có khả năng khởi tạo các đối tượng mà chúng cần, không cần phải biết rõ chi tiết cách thức tạo ra các đối tượng đó.
Thành phần trong Object Manager
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\App;
use Magento\Framework\ObjectManager\FactoryInterface;
/**
* Direct usage of this class is strictly discouraged.
*
* Wrapper around object manager with workarounds to access it in client code.
* Provides static access to objectManager, that is required for unserialization of objects.
*
* @api
* @SuppressWarnings(PHPMD.CouplingBetweenObjects)
* @since 100.0.2
*/
class ObjectManager extends \Magento\Framework\ObjectManager\ObjectManager
{
/**
* @var ObjectManager
*/
protected static $_instance;
/**
* Retrieve object manager
*
* @return ObjectManager
* @throws \RuntimeException
*/
public static function getInstance()
{
if (!self::$_instance instanceof \Magento\Framework\ObjectManagerInterface) {
throw new \RuntimeException('ObjectManager isn\'t initialized');
}
return self::$_instance;
}
/**
* Set object manager instance
*
* @param \Magento\Framework\ObjectManagerInterface $objectManager
* @throws \LogicException
* @return void
*/
public static function setInstance(\Magento\Framework\ObjectManagerInterface $objectManager)
{
self::$_instance = $objectManager;
}
/**
* @param FactoryInterface $factory
* @param \Magento\Framework\ObjectManager\ConfigInterface $config
* @param array $sharedInstances
*/
public function __construct(
FactoryInterface $factory,
\Magento\Framework\ObjectManager\ConfigInterface $config,
array &$sharedInstances = []
) {
parent::__construct($factory, $config, $sharedInstances);
self::$_instance = $this;
}
}
Object Manager cung cấp cho các class khác một số phương thức để tạo ra các đối tượng, bao gồm create()
, get()
được kế thừa từ class \Magento\Framework\ObjectManager\ObjectManager
và getInstance()
.
create()
được sử dụng để tạo ra một đối tượng mới, với khả năng tự động tìm kiếm và tiêm các phụ thuộc cần thiết.get()
được sử dụng để lấy một đối tượng đã được tạo ra trước đó từ cache của Object Manager. Nếu đối tượng chưa tồn tại trong cache, sẽ tạo mới nó và lưu vào cache.getInstance()
được sử dụng để lấy một instance (thể hiện) của một class cụ thể, nhưng không thực sự tạo ra một đối tượng mới.
Cung cấp khả năng ghi đè các đối tượng được tạo ra thông qua các plugin (interceptor) và wrapper.
Cách thức hoạt động của Object Manager
Flow hoạt động bao gồm những bước sau:
- Khởi tạo Object Manager: Được khởi tạo bằng cách tạo một đối tượng từ class
\Magento\Framework\App\Bootstrap
. Điều này xảy ra khi Magento được khởi động. - Tạo một đối tượng: Để tạo một đối tượng, bạn cần gọi phương thức
create()
. Phương thức này nhận vào một chuỗi là tên của class đối tượng cần tạo, tìm và khởi tạo đối tượng đó. - Tiêm phụ thuộc: Nếu đối tượng cần tiêm phụ thuộc, sẽ tự động tìm kiếm các phụ thuộc và tiêm vào đối tượng được tạo.
- Cache đối tượng: Sau khi đối tượng được tạo và tiêm phụ thuộc và lưu trữ đối tượng đó vào cache để sử dụng lại trong lần tiếp theo khi được yêu cầu.
- Trả về đối tượng: Cuối cùng, trả về đối tượng được tạo và tiêm phụ thuộc cho code sử dụng.
Lưu ý
Không được khuyến khích sử dụng để gọi trực tiếp trong Magento 2 vì có thể ảnh hưởng tới hiệu suất và khó khăn trong kiểm soát code của mình. Thay vào đó chúng ta có thể sử dụng Dependency Injection (DI) hoặc Factory Pattern để khởi tạo đối tượng trong hệ thống.
Để tìm hiểu sâu hơn về Dependency Inversion vui lòng truy cập vào Dependency Inversion & Service Contract trong Magento 2
Kết bài
Vậy Object Manager như một bộ lưu trữ và quản lý các đối tượng class trong hệ thống của Magento 2 với cách thức và cách hoạt động của Object Manager chúng ta có thể thấy Object Manager như một phần cốt lõi của Magento trong cấu trúc vận hành của nó.
Kết thúc bài viết, cảm ơn các bạn đã dành thời gian tìm hiểu bài viết này. Hy vọng sẽ giúp ích cho các bạn. Mọi thắc mắc hay câu hỏi vui lòng comment phía dưới bài viết mình sẽ giải đáp nhé! Nếu các bạn muốn tìm hiểu chuyên sâu hơn vui lòng truy cập link này https://developer.adobe.com/commerce/php/development/