Magento 1 এর তুলনায় Magento2 কারখানার প্যাটার্ন সুবিধাগুলি


15

ম্যাজেন্টো 2 ইনজেকশনযোগ্যগুলির জন্য কারখানার ক্লাস ব্যবহার করছে।

উদাহরণস্বরূপ পণ্য শ্রেণি: ProductFactory
উদাহরণস্বরূপ গ্রাহক শ্রেণি:CustomerFactory

আমি বুঝতে পারি না এখানে কারখানার ধরণ কী?

কারণ 1 টি কারখানা ক্লাসের সাথে যুক্ত প্রতিটি শ্রেণীর জন্য। আমি এর কিছু সদৃশ ভাবছি। আমাদের কেন বিমূর্ত কারখানা তৈরি করা উচিত নয় CustomerFactory, ProductFactoryইত্যাদি?

এবং উদাহরণস্বরূপ:

আমরা পাস করতে পারেন AbstractFactoryটাইপ পরীক্ষণের জন্য পরিবর্তে ProductFactoryমধ্যে ProductRepositoryবর্গ কন্সট্রাকটর।

সুতরাং আমরা ProductRepositoryএবং এর মধ্যে শক্ত সংযোগ এড়াতে পারিProductFactory


বিমূর্ত কারখানা শ্রেণি:

namespace Magento\Framework\ObjectManager\Code\Generator;

/**
 * Abstract Factory class 
 */
abstract class AbstractFactory 
{
    /**
     * Object Manager instance
     *
     * @var \Magento\Framework\ObjectManagerInterface
     */
    protected $_objectManager = null;

    /**
     * Instance name to create
     *
     * @var string
     */
    protected $_instanceName = null;


    /**
     * Create class instance with specified parameters
     *
     * @param array $data
     * @return \Magento\Catalog\Model\Product
     */
    public function create(array $data = array())
    {
        return $this->_objectManager->create($this->_instanceName, $data);
    }
}

বিমূর্ত কারখানার বাস্তবায়ন:

namespace Magento\Catalog\Model;
use Magento\Framework\ObjectManager\Code\Generator\AbstractFactory;
/**
 * Factory class for @see \Magento\Catalog\Model\Product
 */
class ProductFactory extends AbstractFactory
{

    public function __construct(\Magento\Framework\ObjectManagerInterface $objectManager, $instanceName = '\\Magento\\Catalog\\Model\\Product')
    {

        $this->_objectManager = $objectManager;
        $this->_instanceName = $instanceName;
    }

}

অবজেক্ট ম্যানেজার এবং কারখানার মধ্যে কী সম্পর্ক?

শৃঙ্খলাবদ্ধ বস্তুর অনেক কিছুই রয়েছে:

  • উদাহরণস্বরূপ ProductRepository(এখানে আমরা এটি ক্লায়েন্ট হিসাবে বলতে পারি) Productঅবজেক্টের প্রয়োজন requires

  • এটির জন্য এটি নির্দিষ্ট ProductFactoryবস্তুর উপর নির্ভর করে ।

  • ProductFactoryঅবজেক্ট অবজেক্টের উপর নির্ভর করে ObjectManager

  • ObjectManagerঅবজেক্ট কারখানার অবজেক্টের উপর নির্ভর করে (এখানে Developer Object)।

অবশ্যই তারা আলগা দম্পতির জন্য ইন্টারফেস ব্যবহার করছে। এখনও সত্যিই বিভ্রান্ত প্রবাহ।

আপনি কি কেউ ম্যাজেন্টো 2 কারখানার প্যাটার্নের সাথে গভীরভাবে সুবিধাগুলি দিতে পারেন এবং এটি কীভাবে ম্যাজেন্টো 1 থেকে আলাদা?

উত্তর:


8

একটি বিষয় মনে রাখবেন যে আমরা কেবলমাত্র কারখানার ক্লাসগুলি স্বয়ংক্রিয়ভাবে তৈরি করি যদি আপনি নিজের একটি নির্দিষ্ট করে না। তার অর্থ, যদি কারখানায় আপনাকে কিছু বিশেষ যাদু করার দরকার হয় তবে আপনি এটি করতে পারেন। (উদাহরণস্বরূপ, যদি আপনি কোনও কারণের জন্য প্রতিটি ইভেন্টে লগইন করতে চান তবে কারখানাটি নিজে লিখুন এবং আমরা এটি স্বয়ংক্রিয়ভাবে তৈরি করব না everything) আমরা যদি সমস্ত কিছুর জন্য একটি একক বিমূর্ত কারখানার শ্রেণি ব্যবহার করি, তবে এটি কার্যকর হবে না।

এটি ডিবাগিংয়ের ক্ষেত্রেও কিছুটা সাহায্য করতে পারে - আপনি আসল শ্রেণিটি দেখতে পাবেন, ব্রেকপয়েন্টগুলি সেট করতে পারবেন, আরও অর্থবহ স্ট্যাক-ট্রেস দেখতে পারেন etc.


ছোট ফাঁক হতে পারে .. শুধুমাত্র পরীক্ষা করার জন্য আমি বিমূর্ত ক্লাসটি ব্যবহার করতে চাই..কখনও যখন পাস হয় আমি কেবল কংক্রিট কারখানার ক্লাসটিই পাস করতে চাই।
শিবকুমার

আকর্ষণীয় - আমি অন্য উপায়ে চারপাশে বিবেচনা করতে হবে। আমি গ্রাহকফ্যাক্টরীটি পাস করতে চাই যাতে আমার কাছে টাইপ ইঙ্গিত রয়েছে যে তৈরি করুন () গ্রাহককে ফিরিয়ে দেবে। অ্যাবস্ট্রাকফ্যাক্টরির সাথে, আমি ফ্যাক্টরি থেকে প্রত্যাবর্তিত অবজেক্টের ধরণের কাজ করার জন্য পিএইচপি স্টর্ম টাইপ ইঙ্গিতটি ব্যবহার করতে পারি না। (বা আমি কিছু মিস করছি?)
অ্যালান ক্যান্ট

8

আমি এখানে ভুল হতে পারি, তবে এটি একটি সুবিধা যা আমি পেয়েছি।
স্বয়ংক্রিয়ভাবে উত্পাদিত কারখানাগুলি ম্যাজিক গ্রেটর বা সেটটারগুলির সাথে কিছুটা মিল।
আসুন বলুন যে কোনও নির্দিষ্ট সত্তার একটি উদাহরণ তৈরি করা যাক (আসুন একে ব্লগপোস্ট বলুন) তৈরি হওয়ার পরে আপনি কিছু ঘটতে চান। ধরা যাক আপনি কোনও ক্ষেত্রে একটি ডিফল্ট মান সেট করতে চান।
উদাহরণটি সেরা নাও হতে পারে তবে আমাকে শুনুন।
আপনি যদি কোনও বিমূর্ত ফ্যাক্টরি ব্যবহার করেন, আপনাকে এটিকে সংশোধন করতে হবে যাতে আপনি যখন setDateইনস্ট্যান্টিয়েট করার পরে পরামিতি 'ব্লগপোস্ট' হিসাবে পরামিতিটি নেবেন তখন আপনি কল করবেন ।

আপনি যদি স্বয়ংক্রিয় setterজেনারেটেড কারখানাটি ব্যবহার করেন, আপনি পরে সেই কারখানাটি তৈরি করতে পারেন, আপনার কোডটিতে কল করতে পারেন, উত্পন্ন কারখানাটি সরিয়ে ফেলুন এবং এটি কাজ করবে।
ম্যাজিক সেটারের সাথে আপনি যা করেন তার মতো আপনি পদ্ধতিটি প্রয়োগ করেন এবং এটি সর্বত্র আহ্বান করা হয়।


হাই মরিয়াস.আপনার প্রতিক্রিয়াটির জন্য ধন্যবাদ.আপনার সাথে গ্রি.সত্ত্বেও আরও তথ্যের প্রয়োজন।
শিবকুমার

@sivakumar। আমি একটি মূল দলের সদস্যেরও একটি উত্তর পছন্দ করব would
মারিয়াস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.