ম্যাজেন্টো 2 এ কি সংগ্রহের ইতিহাস?


25

আমি জানি যে বর্তমানে Magento 2 (2.1.2) এ প্রচুর কোডটি কমবেশি Magento 1 থেকে পোর্ট করা আছে এবং ভবিষ্যতে অনেকগুলি কোড একটি সমমানের দ্বারা প্রতিস্থাপিত হবে। এই দিকটিতে, আমি ভাবছি যে ম্যাজেন্টো 2-তে সংগ্রহের ভবিষ্যত কী।

আমাকে বিস্তারিত বলতে দাও:

ম্যাজেন্টো 1:

ম্যাজেন্টো 1 এ আমরা এর মতো সংগ্রহ পেতে ব্যবহৃত হয়:

$products = Mage::getModel('catalog/product')->getCollection();

তারপরে আমরা সংগ্রহে ফিল্টার এবং অন্যান্য ক্রিয়াকলাপ প্রয়োগ করতে পারি:

$products->addAttributeToFilter('price', ['gteq' => 10]);
$products->addFieldToFilter('created_at', ['lt' => '2016-10-10']);
$products->setPageSize(10);
// ... etc ...

এবং সর্বশেষে তবে সর্বনিম্ন নয়, আমাদের সংগ্রহটি মডেলগুলি ফিরিয়ে আনবে:

foreach ($products as $product) {
    echo get_class($product); // Mage_Catalog_Model_Product
}

ম্যাজেন্টো 2:

Magento বিমূর্তকরণের অনেকগুলি নতুন স্তর যুক্ত করে, আরও বেশি কাজ করার সহজ পদ্ধতি প্রয়োগ করে implementing এর অর্থ হ'ল আমরা যখন সত্তার একটি তালিকা চাই, আমরা এটি একটি সংগ্রহশালা থেকে জিজ্ঞাসা করি:

$productResults = $this->productRepository->getList($searchCriteria);

আমরা ফিল্টার প্রয়োগ করতে চান, আমরা সংমিশ্রণ ব্যবহার SearchCriteriaBuilder, FilterGroupBuilder, FilterBuilderএবং SortOrderBuilder:

$this->searchCriteriaBuilder->addSortOrder(
    $this->sortOrderBuilder
        ->setField('created_at')
        ->setAscendingDirection()
        ->create()
);
$priceFilter = $this->filterBuilder
    ->setField('price')
    ->setValue(10)
    ->setConditionType('gteq')
    ->create();
$createdAtFilter = $this->filterBuilder
    ->setField('created_at')
    ->setValue('2016-10-10')
    ->setConditionType('lt')
    ->create();
$filterGroups = [
    $this->filterGroupBuilder->addFilter($priceFilter)->create(),
    $this->filterGroupBuilder->addFilter($createdAtFilter)->create()
];

এবং যদি আমরা আমাদের ফলাফলগুলি নিয়ে পুনরাবৃত্তি করতে চাই তবে আমরা ডেটা মডেলগুলি পাই, প্রকৃত (উত্তরাধিকারসূত্রে) মডেলগুলি না:

foreach ($productResults->getItems() as $product) {
    echo get_class($product); // \Magento\Catalog\Model\Data\Product
}

এই ধরনের বিমূর্ততা সলিড নীতি অনুসরণ করে এবং 'উত্তরাধিকারের উপরের রচনা' -নীতিটিকে আলিঙ্গন করে। সংগ্রহের উপর অন্যথায় সম্পন্ন হওয়া কোনও 'বহিরাগত' অপারেশন (উদাহরণস্বরূপ মিলিত হওয়ার মতো) সংগ্রহস্থলের অভ্যন্তরীণভাবে সম্পন্ন হয়, যা মডিউলের বাইরে ব্যবহার করাও সহজ করে তোলে।

প্রশ্নটি:

এই সবগুলি আমাকে বিস্মিত করে: পুরো সংগ্রহস্থল / ডেটা মডেল-পদ্ধতির সাথে, সংগ্রহের জন্য ম্যাজেন্টো 2 এর ভবিষ্যতে কোনও স্থান আছে? সংগ্রহগুলি কেবলমাত্র মডিউল দ্বারা অভ্যন্তরীণভাবে ব্যবহার করা হবে এবং এর বাইরে নয়? বা সত্তা ম্যানেজারের পক্ষে অবহেলা করা যাচ্ছে?

বর্তমানে, আপনি যদি ডেটা মডেলগুলিকে আলিঙ্গন করতে চান, তবে এখনও \Magento\Framework\Model\AbstractModelসংগ্রহটি কাজ করার জন্য আপনাকে উত্তরাধিকারসূত্রে প্রাপ্ত মডেল (উত্তরাধিকার সূত্রে প্রাপ্ত ) তৈরি করতে হবে (যেহেতু Magento\Framework\Data\Collection::setItemObjectClassমডেলটি থেকে প্রসারিত হওয়া প্রয়োজন Magento\Framework\DataObject)। এবং আপনার সংগ্রহস্থলে ফিল্টার করতে সক্ষম হতে আপনার সংগ্রহ প্রয়োজন need কিন্তু তারপরে আবারও, সংগ্রহশালায় আপনাকে আপনার (নিয়মিত) মডেলটিকে একটি ডেটা মডেলে রূপান্তর করতে হবে।

বা আমাদের কি এটি অর্ডার সংগ্রহের মতো প্রয়োগ করতে হবে, যেখানে এর getList()উদাহরণটি ফিরে আসে Magento\Sales\Api\Data\OrderSearchResultInterface, কিন্তু পানির নিচে অনুসন্ধানের ফলাফলগুলি এই ইন্টারফেসটি প্রয়োগ করে এমন একটি নিয়মিত সংগ্রহ ছাড়া আর কিছুই নয়। মজাদার তথ্য: অনুসন্ধানের ফলাফলগুলি জানিয়েছে যে এটি ডেটা মডেলগুলির একটি অ্যারে ফিরিয়ে দেবে ( Magento\Sales\Api\Data\OrderInterface[]), তবে আপনি কোডটি বিশ্লেষণ করলে getItems()কার্যকর হবে Magento\Framework\Data\Collection::getItems()যা বিনিময়ে ডেটা মডেলগুলি নয়, অর্ডার মডেলগুলি (সেট হিসাবে সেট করা Magento\Sales\Model\ResourceModel\Order\Collection::_construct()) দেয়। 'উত্তরাধিকারের ওপরে রচনা' এর জন্য অনেক কিছু।

ম্যাজেন্টো ২-তে সঠিক উপায়টি নিয়ে অনেক প্রশ্ন আবারও একই জিনিসটি করার 100 টি পদ্ধতি রয়েছে তবে 'দ্য ম্যাজেন্টো ওয়ে' কী? বা আমি কি এখানে পুরোপুরি ভুল ট্র্যাকের উপরে আছি?


2
আসল প্রশ্ন জিজ্ঞাসা এখানে +1। আমি এখানে একটি মূল দেব উত্তরটি সত্যিই পছন্দ করব
মারিয়াস

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

উত্তর:


16

সংগ্রহগুলি এখন হ্রাস করা হয় না। কিছু মডিউল ইতিমধ্যে পরিষেবা চুক্তি এপিআইগুলিকে প্রকাশ করে, অন্যরা এখনও কেবলমাত্র মডেল / সংগ্রহের API গুলি প্রকাশ করে।

পরিকল্পনাটি হ'ল:

  1. আরও ভাল @api কভারেজ সহ বর্তমান অবস্থা প্রতিফলিত করুন: @api সহ কিছু মডিউলগুলিতে বিমূর্ত সংগ্রহ এবং নির্দিষ্ট সংগ্রহগুলি বর্নিত করুন
  2. উত্তরাধিকার-ভিত্তিক এপিআইয়ের উপর নির্ভরতা ছাড়াই পরিষেবা চুক্তিগুলি সহজে তৈরি করার অনুমতি দেওয়ার জন্য অধ্যবসায় কাঠামোটিকে উন্নত করুন: সংগ্রহ, মডেলগুলি, সংস্থানসমূহের মডেলগুলি
  3. পরিষেবা চুক্তির সংগ্রহ-ভিত্তিক বাস্তবায়নগুলি প্রচার না করার জন্য অ্যাবস্ট্রাক্ট সংগ্রহকে হ্রাস করুন
  4. পরিষেবা চুক্তি এপিআই সহ ধীরে ধীরে মডিউলগুলির নতুন সংস্করণগুলি প্রকাশ করুন

সুতরাং সংগ্রহগুলি এক পর্যায়ে অবনমিত হবে, তবে এখন সেগুলি ম্যাজেন্টো 2 এপিআইয়ের মধ্যে একটি।

পরিষেবা চুক্তিগুলি বাস্তবায়নের জন্য, - মডেলগুলি এবং সংগ্রহগুলি ম্যাগেন্টো <= 2.1 এ প্রয়োগ করার একমাত্র সুবিধাজনক উপায়। পরিষেবা চুক্তিগুলি কেবল ইন্টারফেস। তাদের বাস্তবায়ন পাবলিক এপিআই এর অংশ নয় এবং পরে পরিবর্তিত হতে পারে।


1
আপনার উত্তরের জন্য ধন্যবাদ. সুতরাং নতুন মডিউল তৈরিকারী বিকাশকারীদের জন্য আপনার পরামর্শ কী? আমার বর্তমান কৌশলটি পরিষেবা চুক্তি তৈরি করা যা (পানির নিচে) এখনও সংগ্রহগুলি ব্যবহার করে কারণ ক) এটি ফিল্টারিং সহজ করে তোলে এবং খ) সত্তা পরিচালক এখনও খুব পরীক্ষামূলক / অনথিভুক্ত। কিছু সময়ে অভ্যন্তরীণ কাজগুলি অন্য যে কোনও কিছু দ্বারা প্রতিস্থাপন করা যেতে পারে তবে ইন্টারফেসটি একই থাকে। তবে আমি যদি আপনার উত্তরটি সঠিকভাবে বুঝতে পারি তবে এটি এখনকার সঠিক উপায়?
জিল বার্কার্স

সঠিক। এটি প্রতিফলিত করার জন্য আমি আমার উত্তর সম্পাদনা করেছি।
আন্তন ক্রিল

1
উপরের বিষয়টি বিবেচনা করে, কার্যকারিতা বাস্তবায়নের উপযুক্ত উপায় কী হতে পারে যার জন্য পরিষেবা চুক্তির মাধ্যমে তথ্য আনা যায় না এমন ডেটা প্রয়োজন? উদাহরণস্বরূপ, যদি মডিউল A এর অর্থ প্রদানের পদ্ধতি দ্বারা ফিল্টার করা সমস্ত আদেশের প্রয়োজন হয়।
Stjepan
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.