উত্তর এখানে দেওয়া হল
কেন একটি প্রক্সি ক্ষেত্রে একটি প্রক্সি ক্লাস ব্যবহার করা হয়?
যদি আপনি নীচের কোডটি নীচে ঘুরে দেখেন যা ক্লাস "সেটকভার্সনভালিউঅবার্সার" এর জন্য লেখা রয়েছে, যদি গুগল অ্যাডওয়ার্ডস সক্রিয় না হয় "রিটার্ন" এবং যদি কোনও আদেশ নেই "রিটার্ন"। মানে, অর্ডার সংগ্রহের অবজেক্টটি তখনই তৈরি করা হবে যখন অর্ডার আইডি উপস্থিত থাকে এবং গুগল অ্যাডওয়ার্ড সক্রিয় থাকে। যদি আমরা প্রকৃত অর্ডার সংগ্রহের ক্লাসটি ইনজেক্ট করি তবে অবজেক্ট ম্যানেজার গুগল অ্যাডওয়ার্ডগুলি সক্রিয় না করে এবং সেই অর্ডার সাফল্যের পৃষ্ঠাটি না জেনে তার পিতামাত্ত শ্রেণীর অবজেক্টের সাথে সংগ্রহ অবজেক্ট তৈরি করে। সুতরাং, চাহিদার উপর আরও ভাল তৈরি করুন যা প্রক্সি ব্যবহার। /vendor/magento/module-google-adwords/Observer/SetConversionValueObserver.php
/**
* Set base grand total of order to registry
*
* @param \Magento\Framework\Event\Observer $observer
* @return \Magento\GoogleAdwords\Observer\SetConversionValueObserver
*/
public function execute(\Magento\Framework\Event\Observer $observer)
{
if (!($this->_helper->isGoogleAdwordsActive() && $this->_helper->isDynamicConversionValue())) {
return $this;
}
$orderIds = $observer->getEvent()->getOrderIds();
if (!$orderIds || !is_array($orderIds)) {
return $this;
}
$this->_collection->addFieldToFilter('entity_id', ['in' => $orderIds]);
$conversionValue = 0;
/** @var $order \Magento\Sales\Model\Order */
foreach ($this->_collection as $order) {
$conversionValue += $order->getBaseGrandTotal();
}
$this->_registry->register(
\Magento\GoogleAdwords\Helper\Data::CONVERSION_VALUE_REGISTRY_NAME,
$conversionValue
);
return $this;
}
কখন, সাধারণভাবে একজনের প্রক্সি ক্লাস ব্যবহার করা উচিত?
- প্রক্সি শ্রেণীর ইনজেক্ট করুন যখন আপনি মনে করেন যে অবজেক্ট তৈরি করা ব্যয়বহুল হবে এবং শ্রেণীর নির্মাতা বিশেষত সংস্থান-নিবিড়। - যখন আপনি অবজেক্ট তৈরির কারণে অপ্রয়োজনীয় পারফরম্যান্স প্রভাবটি চান না। - যখন আপনি মনে করেন যখন নির্দিষ্ট অবস্থানে নির্দিষ্ট পদ্ধতিতে সবসময় না হয় তখন অবজেক্ট তৈরি হওয়া উচিত should উদাহরণস্বরূপ লেআউট কনস্ট্রাক্টর হ'ল একটি রিসোর্স-নিবিড়।
প্রকৃত লেআউট কনস্ট্রাক্টর বনাম লেআউট / প্রক্সি
public function __construct(
Layout\ProcessorFactory $processorFactory,
ManagerInterface $eventManager,
Layout\Data\Structure $structure,
MessageManagerInterface $messageManager,
Design\Theme\ResolverInterface $themeResolver,
Layout\ReaderPool $readerPool,
Layout\GeneratorPool $generatorPool,
FrontendInterface $cache,
Layout\Reader\ContextFactory $readerContextFactory,
Layout\Generator\ContextFactory $generatorContextFactory,
AppState $appState,
Logger $logger,
$cacheable = true,
SerializerInterface $serializer = null
) {
$this->_elementClass = \Magento\Framework\View\Layout\Element::class;
$this->_renderingOutput = new \Magento\Framework\DataObject();
$this->serializer = $serializer ?: ObjectManager::getInstance()->get(SerializerInterface::class);
$this->_processorFactory = $processorFactory;
$this->_eventManager = $eventManager;
$this->structure = $structure;
$this->messageManager = $messageManager;
$this->themeResolver = $themeResolver;
$this->readerPool = $readerPool;
$this->generatorPool = $generatorPool;
$this->cacheable = $cacheable;
$this->cache = $cache;
$this->readerContextFactory = $readerContextFactory;
$this->generatorContextFactory = $generatorContextFactory;
$this->appState = $appState;
$this->logger = $logger;
}
প্রক্সি কন্সট্রাক্টর, একবার দেখুন, কোনও পিতামাতৃ কনস্ট্রাক্টর কল করা হয়নি পাশাপাশি সবেমাত্র বিন্যাস শ্রেণীর নামটিও পাস করেছেন যাতে পদ্ধতি বলা হলে প্রকৃত অবজেক্ট তৈরি হয় creation
/**
* Proxy constructor
*
* @param \Magento\Framework\ObjectManagerInterface $objectManager
* @param string $instanceName
* @param bool $shared
*/
public function __construct(
\Magento\Framework\ObjectManagerInterface $objectManager,
$instanceName = \Magento\Framework\View\Layout::class,
$shared = true
) {
$this->_objectManager = $objectManager;
$this->_instanceName = $instanceName;
$this->_isShared = $shared;
}
প্রক্সি ক্লাসে চাহিদার ভিত্তিতে অবজেক্ট তৈরি করার পদ্ধতি রয়েছে, _সুবজেক্টটি উত্তীর্ণ শ্রেণীর অবজেক্ট।
/**
* Get proxied instance
*
* @return \Magento\Framework\View\Layout
*/
protected function _getSubject()
{
if (!$this->_subject) {
$this->_subject = true === $this->_isShared
? $this->_objectManager->get($this->_instanceName)
: $this->_objectManager->create($this->_instanceName);
}
return $this->_subject;
}
এবং পদ্ধতিটিকে _ সাবজেক্ট ব্যবহার করে ডাকা হয়।
/**
* {@inheritdoc}
*/
public function setGeneratorPool(\Magento\Framework\View\Layout\GeneratorPool $generatorPool)
{
return $this->_getSubject()->setGeneratorPool($generatorPool);
}