ঠিক আছে, তাই গতকাল আমরা ক্লাসে / টেমপ্লেটগুলিতে সরাসরি ব্যবহারেরObjectManager
বিষয়ে ম্যাজেন্টো সম্প্রদায়ের অন্যান্য লোকদের সাথে বড় আলোচনা করেছি ।
অ্যালান কেন্টের উদ্ধৃতি দিয়ে আমরা সরাসরি অবজেক্ট ম্যানেজারটি কেন ব্যবহার না করা উচিত সে কারণগুলি সম্পর্কে আমি ইতিমধ্যে অবগত রয়েছি :
এর বেশ কয়েকটি কারণ রয়েছে। কোডটি কাজ করবে, তবে অবজেক্টম্যানেজার ক্লাসটি সরাসরি উল্লেখ না করা ভাল অনুশীলন।
- কারণ আমরা তাই বলে! ;-) (ধারাবাহিক কোড ভাল কোড হিসাবে ভাল প্রকাশিত)
- কোডটি ভবিষ্যতে ভিন্ন নির্ভরতা ইনজেকশন কাঠামোর সাথে ব্যবহার করা যেতে পারে
- পরীক্ষা করা সহজ - আপনি মক অবজেক্টম্যানেজার সরবরাহ না করে প্রয়োজনীয় ক্লাসের জন্য মক আর্গুমেন্টগুলি পাস করেন
- এটি নির্ভরতা আরও পরিষ্কার রাখে - কোডটির মাঝখানে লুকিয়ে থাকা নির্ভরতা না রেখে কোডটি কনস্ট্রাক্টর তালিকার মাধ্যমে কী নির্ভর করে তা স্পষ্ট is
- এটি প্রোগ্রামারদের এনক্যাপসুলেশন এবং মডুলারাইজেশনের মতো ধারণাগুলি সম্পর্কে আরও ভালভাবে ভাবতে উত্সাহিত করে - যদি কনস্ট্রাক্টর বড় হয়ে যায়, তবে এটি কোডের রিফ্যাক্টরিংয়ের প্রয়োজনের একটি চিহ্ন maybe
স্ট্যাকএক্সচেঞ্জে আমি যা দেখেছি, সেখান থেকে অনেক লোক সহজ / সংক্ষিপ্ত / প্রস্তাবিত সমাধানের দিকে ঝোঁক না যেমন উদাহরণস্বরূপ:
<?php
//Get Object Manager Instance
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
//Load product by product id
$product = $objectManager->create('Magento\Catalog\Model\Product')->load($id);
পরিবর্তে যন্ত্রণাদায়ক তবে প্রস্তাবিত প্রক্রিয়াটি অতিক্রম করার পরিবর্তে :
- একটি মডিউল তৈরি
- ঘোষণা পছন্দ
- ইনজেকশন নির্ভরতা
- জনসাধারণের পদ্ধতি ঘোষণা করুন
যাইহোক, এবং এখানে দ্বিধা দেখা দেয়, ম্যাজেন্টো 2 মূল ফাইলগুলি প্রায়শই সরাসরি অবজেক্টম্যানেজারকে কল করে । একটি দ্রুত উদাহরণ এখানে পাওয়া যাবে: https://github.com
সুতরাং এখানে আমার প্রশ্নগুলি:
- তারা কেন আমাদের না করার পরামর্শ দিচ্ছে ম্যাগেন্টো কেন? এর অর্থ কি এমন কিছু মামলা রয়েছে যেখানে আমাদের
ObjectManager
সরাসরি ব্যবহার করা উচিত ? যদি তা হয় তবে সেসব মামলা কী কী? - সরাসরি অবজেক্টম্যানেজার ব্যবহারের পরিণতিগুলি কী কী ?
The intent of zend-servicemanager is for use as an Inversion of Control container. It was never intended as a general purpose service locator [...]
। যা এটি এম 2 এর ক্ষেত্রেও প্রযোজ্য। এছাড়াও, There are valid use cases
বিভাগটি যা এখানে আবার প্রযোজ্য তা পরীক্ষা করে দেখুন ।