ম্যাজেন্টো 2 ডিআইয়ের সেরা অনুশীলন


19

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

ইন্টারফেসের সাথে সংমিশ্রণে আমি কখন ডিআই ব্যবহার করব এবং কখন আমার উচিত হবে না?
এটি পরিষ্কার করার জন্য এখানে একটি মূল উদাহরণ।

ক্লাসে Magento\Core\Helper\Dataএরকম একজন কনস্ট্রাক্টর রয়েছে:

public function __construct(
    \Magento\Framework\App\Helper\Context $context,
    \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
    \Magento\Store\Model\StoreManagerInterface $storeManager,
    \Magento\Framework\App\State $appState,
    PriceCurrencyInterface $priceCurrency,
    $dbCompatibleMode = true
) {
    parent::__construct($context);
    $this->_scopeConfig = $scopeConfig;
    $this->_storeManager = $storeManager;
    $this->_appState = $appState;
    $this->_dbCompatibleMode = $dbCompatibleMode;
    $this->_priceCurrency =  $priceCurrency;
}

আমার প্রশ্নটি ভ্যারিয়ায় নিবদ্ধ \Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig(আমি জানি একই নির্মাণকারীর মধ্যে অন্যরা রয়েছেন, তবে একটি ব্যাখ্যা আমার মনে হয় সমস্ত ক্ষেত্রেই খাপ খায়)।

মতে di.xmlকোর মডিউল থেকে Var এর একটি দৃষ্টান্ত হতে হবে Magento\Framework\App\Config:

<preference for="Magento\Framework\App\Config\ScopeConfigInterface" type="Magento\Framework\App\Config" />

তবে আমার প্রয়োজন হলে আমি সহজেই তা পরিবর্তন করতে পারি।

আমার কোডে কখন এমন ইন্টারফেস ব্যবহার করা উচিত?
আমি এই অসম্পূর্ণ নমুনা মডিউলটি তৈরি করেছি (বিজ্ঞাপনের জন্য দুঃখিত), যেখানে আমি এই জাতীয় ইন্টারফেস ব্যবহার করেছি, তবে সেগুলির সমস্তই মূল থেকে এসেছে। আমি নিজের একটা তৈরি করিনি। আমি কি?


"আসুন বলি এটি দুর্দান্ত দুর্দান্ত জিনিসগুলি করে।" এটিতে স্ট্যাকেক্সচেঞ্জে থাকা অনলাইনের লোকদের কি ভাসমান মাথা রয়েছে? কারণ আমি এটি ইনস্টল করব;)
ডেভিড ম্যানার্স

1
@ ডেভিড ম্যানার্স আমি আমার 1.x এক্সটেনশনগুলি 2.0 তে পোর্ট করার চেষ্টা করব যাতে এটিও পোর্ট করা যায়। আমি ভাসমান অংশ সম্পর্কে জানি না, তবে আমি কী করতে পারি তা দেখতে পাচ্ছি।
Marius

ইমো এটি কোনও Mage2 নির্দিষ্ট প্রশ্ন নয়, আরও সাধারণভাবে "কখন ইন্টারফেস ব্যবহার করবেন"। এটি নির্ভর করে যেখানে আপনি চান যে কেউ আপনার এক্সটেনশানটি বাড়িয়ে দিতে সক্ষম হবে। আমি যেখানেই আপনি ব্যবসার যুক্তি দিয়ে কাজ করেন যেখানেই বলব, যা পরিবর্তিত হতে পারে। ;) এগুলি ছাড়া আচরণ ব্যতীত অবজেক্টগুলি (যেমন সাধারণ ডেটা অবজেক্ট) সাধারণত পরিবর্তিত হয় না।
টোবিয়াস

1
@ তোবিয়াসজান্ডার, আপনি বলতে চাচ্ছেন যে প্রায় প্রতিটি কিছুর জন্য আমাকে একটি ইন্টারফেস তৈরি করতে হবে? অভিশাপ যে অনেক কাজ।
Marius

@ মারিয়াস, আপনি যদি 100% নমনীয় হতে চান তবে হ্যাঁ। তবে আমি এটি ওভার ইঞ্জিনিয়ার করব না। আমি ব্যক্তিগতভাবে ওডেটোকোড / ব্লগস / স্কট / অর্চিভ / ২০০৯/06/০8/২০ কে বাস্তবে কার্যকর হওয়ার সময় পরিচয় হিসাবে পছন্দ করি
টোবিয়াস

উত্তর:


9

ইমো এটি কোনও Mage2 নির্দিষ্ট প্রশ্ন নয়, আরও সাধারণভাবে "কখন ইন্টারফেস ব্যবহার করবেন"। এটি নির্ভর করে যেখানে আপনি চান যে কেউ আপনার এক্সটেনশানটি বাড়িয়ে দিতে সক্ষম হবে। আমি যেখানেই আপনি ব্যবসার যুক্তি দিয়ে কাজ করেন যেখানেই বলব, যা পরিবর্তিত হতে পারে। ;) এগুলি ছাড়া আচরণ ব্যতীত অবজেক্টগুলি (যেমন সাধারণ ডেটা অবজেক্ট) সাধারণত পরিবর্তিত হয় না।

আপনি যদি 100% নমনীয় হতে চান তবে কোনওভাবে আপনাকে সর্বত্র ইন্টারফেস ব্যবহার করতে হবে। তবে আমি এটি ওভার ইঞ্জিনিয়ার করব না। আমি ব্যক্তিগতভাবে http://odetocode.com/blogs/scott/archive/2009/06/08/when-do-i-use-interfaces.aspx এটি আসলে কার্যকর যখন একটি ভূমিকা হিসাবে পছন্দ করি।


7

Magento2 SOLID নীতিগুলির ব্যবহারের প্রচার করে ।

নির্ভরতা বিপরীতার নীতি সরাসরি বলে, যে কোড বিমূর্ততা (ইন্টারফেস) উপর নির্ভর করে।

ইন্টারফেস বিভাজন নীতি বলে যে অনেক ক্লায়েন্ট-নির্দিষ্ট ইন্টারফেস এক সাধারণ-উদ্দেশ্য ইন্টারফেসের চেয়ে ভাল। ক্লাসগুলি সুরক্ষিত ইন্টারফেসও সংজ্ঞায়িত করতে পারে, তাই কোনও স্থাপত্য দৃষ্টিকোণ থেকে ইন্টারফেসগুলি আরও বেশি পছন্দ করে।

এছাড়াও পিএইচপি ক্লাসগুলির একাধিক উত্তরাধিকার সমর্থন করে না, তবে ইন্টারফেসগুলির একাধিক বাস্তবায়ন সমর্থন করে। ইন্টারফেসের জন্য এটি আরও একটি বিষয়।

সুতরাং, একটি সাধারণ নিয়ম ব্যবহার করা যেতে পারে: আপনি কী ব্যবহার করবেন তা যদি না জানেন তবে সর্বদা ইন্টারফেস ব্যবহার করুন

পুনশ্চ. পারফরম্যান্সটি আমার জন্য ইন্টারফেস ব্যবহার না করার কারণ নয়


আমি আগ্রহী যদি ইন্টারফেসের ব্যবহার কোনওভাবে পারফরম্যান্সকে প্রভাবিত করে?
অমিতশ্রী

1
অটোলোয়াড ফাংশন কল বিনামূল্যে নয়। উদাহরণ দেখুন: ( dl.dropboxusercontent.com/u/3103646/... )
ঢাকা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.