ম্যাজেন্টো 2: অপরিবর্তনীয় রাজ্য দিয়ে ডেটা অবজেক্ট তৈরি করা?


9

অন্য ম্যাজেন্টো 2 এ একটি মন্তব্য বন্ধ করে দেওয়া

আপনার যদি কিছু গণনা করা মান ভাগ করে নেওয়া দরকার হয় তবে গণনা আচরণটি পৃথক অবজেক্টে রাখুন এবং সেই মানটিকে যে ব্লকগুলির প্রয়োজন সেগুলি থেকে কল করুন। রেজিস্ট্রি নিরুৎসাহিত করা হয়েছে কারণ এটি বিশ্বব্যাপী পরিবর্তনীয় রাষ্ট্র এবং আপনি সেখান থেকে কী পাবেন তা আপনি কখনই নিশ্চিত নন।

অপরিবর্তনীয় অবস্থার সাথে ম্যাজেন্টো 2 এ কোনও অবজেক্ট তৈরি করার কোনও উপায় আছে কি? রেজিস্ট্রি ( Magento\Framework\Registry) ব্যবহার করা নিরুৎসাহিত করা হয়েছে কারণ এটি বিশ্বব্যাপী পরিবর্তনীয় রাষ্ট্র (অনুমিতযোগ্য কারণ, যদিও registerপদ্ধতিটি আপনাকে একটি বিদ্যমান কী পরিবর্তন করতে দেয় না, আপনি আনসেট করে আবার সেই কীটি পুনরায় সেট করতে পারেন )।

যাইহোক - Magento 2 এ যে কোনও অবজেক্টের জন্য একই সমস্যা বিদ্যমান an

namespace Pulsestorm\Helloworld\Model;
use Magento\Framework\DataObject;

class ViewVars extends DataObject
{
}

তারপরে স্বয়ংক্রিয় কনস্ট্রাক্টর নির্ভরতা ইনজেকশনটি নিশ্চিত করে যে যে কেউ এই ভাগ করা বস্তুকে দখল করতে পারে। যদি অবজেক্টটি ভাগ করা যায় না, তবে ভিউ / ব্লক এটি ধরতে পারে না।

তত্ত্বগতভাবে, আমরা এর মতো কিছু করতে পারি

namespace Pulsestorm\Helloworld\Model;

class ViewVars
{
    protected $_data=false;
    protected function setData($data)
    {
        if($_data)
        {
            throw new Exception("Immutable");
        }
        $this->_data = $data;
    }

    public function getData()
    {
        return $this->_data;
    }
}

কিন্তু যে একটি দৃশ্যের জন্য পৃথক ভেরিয়েবলের মান স্থাপনার সাধারণ হিসাবে একটি কাজের জন্য অনেক কাজ মত মনে হয় । অপরিবর্তনীয় ডেটা অবজেক্টগুলি সম্পর্কে আমি অবগত নই যা তৈরি করার জন্য কি ম্যাজেন্টো 2 এর থেকে আরও ভাল উপায় আছে?


পুরানো ম্যাজ রেজিস্ট্রি প্যাটার্নটি মানটিকে অপরিবর্তনীয় করার চেষ্টা করে না? আইএমএইচও এটি ল্যাং কনস্ট্রাক্ট হওয়া উচিত। এম 2 এইচএইচভিএমের সাথে সামঞ্জস্যপূর্ণ তাই আপনার যদি এই কন্সট্রাক্টের মারাত্মক প্রয়োজন হয় তবে আপনি হ্যাক অবলম্বন করতে পারেন, যা অপরিবর্তনীয় ডেটা ধরণের সরবরাহ করে। স্পষ্টতই এটি উভয় কৌতুকের মধ্যে বলা হয়েছে এবং আমার মাথাটি এমনভাবে ঠেকিয়েছে যেন কোনও অঙ্গভঙ্গি করা যায় যে এটি সম্ভবত কোনও জিনিস করতে পারে ™ ™
ফিলিউঙ্কল

1
আমি মনে করি অ্যান্টনের মন্তব্যের মূল বক্তব্যটি আরও ছিল যে আপনি যদি একটি রেজিস্ট্রি ইন্টারফেস ব্যবহার করেন তবে আপনি আসলে কী বেরিয়ে আসছেন সে সম্পর্কে কোনও গ্যারান্টি নেই। আপনি বলতে পারেন, 'ঠিক আছে, আমি এখানে istry আমার \ মডেলটি রেজিস্ট্রি কী কারেন্ট_মডেলে সঞ্চয় করতে যাচ্ছি, এবং এটি প্রয়োজনীয় হিসাবে ব্যবহার করব'। তবে (1) কোনও কিছুই গ্যারান্টি দেয় না যে কারেন্ট_মোডেলটি \ আমার \ মডেল (বা কোনও কিছু) এর উদাহরণ; এবং (২) সম্পাদনের পথে অন্য কোথাও যে কোনও কোড যে কোনও উপায়ে সেই রেজিস্ট্রি কী ব্যবহার করতে বা সংশোধন করতে পারে। যে বড় সমস্যা হতে পারে। রাষ্ট্রের ডেটা বজায় রাখতে নির্ভরতা ইনজেকশন সহ একটি সংজ্ঞায়িত ইন্টারফেস এবং সিঙ্গেলটন ব্যবহার করা আরও ভাল।
রায়ান হোয়ের

সেটারগুলির সাথে অবজেক্টটি অপরিবর্তনীয় নয়। অবজেক্টে ডেটা সেট করতে কনস্ট্রাক্টর ব্যবহার করুন।
কান্দি

উত্তর:


4

না, বর্তমানে পরিবর্তনীয় ডেটা অবজেক্ট তৈরি করার জন্য ম্যাজেন্টো 2 তে এর চেয়ে ভাল আর কোনও উপায় নেই। আপনি এটি তৈরি করতে পারেন, উদাহরণস্বরূপ, ইন্টারফেস থেকে প্রজন্মের গেটর এবং কনস্ট্রাক্টর দ্বারা।

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