Magento 2: การสร้างออบเจ็กต์ข้อมูลด้วยสถานะที่ไม่เปลี่ยนรูปแบบ?


9

การถอดความคิดเห็นออกจากMagento 2 อื่น

หากคุณต้องการแชร์ค่าที่คำนวณได้ให้วางพฤติกรรมการคำนวณเพื่อแยกวัตถุและเรียกมันจากบล็อกที่ต้องใช้ค่านั้น รีจิสทรีไม่ได้รับการสนับสนุนเนื่องจากเป็นสถานะที่ไม่แน่นอนในระดับโลกและคุณไม่แน่ใจว่าจะได้รับสิ่งใดจากที่นั่น

มีวิธีในการสร้าง Object ใน Magento 2 ด้วยสภาพที่ไม่เปลี่ยนรูปแบบหรือไม่? การใช้งานรีจิสตรี ( Magento\Framework\Registry) ไม่ได้รับการสนับสนุนเนื่องจากเป็นสถานะที่ไม่แน่นอนทั่วโลก (สันนิษฐานได้เพราะแม้ว่าregisterวิธีการนี้จะไม่อนุญาตให้คุณเปลี่ยนรหัสที่มีอยู่ แต่คุณสามารถยกเลิกการตั้งค่าและรีเซ็ตคีย์นั้นได้)

อย่างไรก็ตาม - ปัญหาเดียวกันนี้มีอยู่สำหรับวัตถุใด ๆ ใน Magento 2 หากฉันต้องการสร้างวัตถุ

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;
    }
}

แต่ดูเหมือนว่าการทำงานมากสำหรับงานเป็นสามัญเป็นการตั้งค่าตัวแปรแต่ละมุมมองหนึ่ง Magento 2 มีวิธีที่ดีกว่าในการสร้างออบเจ็กต์ข้อมูลที่เปลี่ยนแปลงไม่ได้หรือไม่?


รูปแบบ Mage Registry แบบเก่าไม่พยายามทำให้ค่าไม่เปลี่ยนรูปแบบหรือไม่ IMHO สิ่งนี้ควรเป็นโครงสร้างสร้าง M2 เข้ากันได้กับ HHVM ดังนั้นหากคุณต้องการโครงสร้างนี้อย่างสมบูรณ์คุณสามารถใช้การแฮ็กซึ่งให้ประเภทข้อมูลที่ไม่เปลี่ยนรูป เห็นได้ชัดว่านี่เป็นเรื่องตลกทั้งในและโดยหัวของฉันไปที่ด้านข้างราวกับว่ามันอาจจะเป็นสิ่งที่สามารถทำได้™
philwinkle

1
ฉันคิดว่าประเด็นของความคิดเห็นของแอนตันนั้นมากกว่านั้นหากคุณกำลังใช้ส่วนติดต่อรีจิสตรีไม่มีการรับประกันเกี่ยวกับสิ่งที่คุณกำลังออกไปจริง ๆ คุณสามารถพูดได้ว่า 'โอเคฉันจะเก็บ \ My \ Model ไว้ในคีย์รีจิสทรี current_model ที่นี่และใช้มันตามต้องการ' แต่ (1) ไม่มีอะไรรับประกันได้ว่า current_model เป็นตัวอย่างของ \ My \ Model (หรืออะไรก็ได้); และ (2) รหัสใด ๆ ที่ใดก็ได้ในเส้นทางการดำเนินการสามารถใช้หรือแก้ไขคีย์รีจิสทรีนั้นได้ไม่ว่าด้วยวิธีใด ที่อาจทำให้เกิดปัญหาใหญ่ ดีกว่าที่จะใช้อินเทอร์เฟซที่กำหนดไว้และซิงเกิลตันด้วยการฉีดพึ่งพาเพื่อรักษาข้อมูลสถานะนั้น
Ryan Hoerr

วัตถุที่มีตัวตั้งค่าไม่เปลี่ยนรูป ใช้ตัวสร้างเพื่อตั้งค่าข้อมูลในวัตถุ
KAndy

คำตอบ:


4

ไม่ขณะนี้ไม่มีวิธีที่ดีกว่าใน Magento 2 ในการสร้างวัตถุข้อมูลที่ไม่เปลี่ยนรูปแบบ คุณสามารถสร้างมันได้เช่นโดยการสร้าง getters และตัวสร้างจากอินเทอร์เฟซ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.