সিরিয়ালাইজেশন

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

ব্লকলি এই ডেটার জন্য দুটি ফর্ম্যাট প্রদান করে: JSON এবং XML। আমরা নতুন প্রকল্পের জন্য JSON সিস্টেম ব্যবহার করার পরামর্শ দিই এবং XML ব্যবহার করে পুরানো প্রকল্পগুলিকে আপগ্রেড করতে উত্সাহিত করি৷ XML সিস্টেম হল লিগ্যাসি সেভ ফরম্যাট। এটি সরানো হবে না, তবে এটি নতুন বৈশিষ্ট্যগুলি পাবে না।

JSON সিস্টেম

JSON সিরিয়ালাইজেশন সিস্টেম একাধিক সিরিয়ালাইজার নিয়ে গঠিত। ব্লক এবং ভেরিয়েবলের জন্য বিল্ট-ইন সিরিয়ালাইজার রয়েছে এবং আপনি অতিরিক্ত সিরিয়ালাইজারও নিবন্ধন করতে পারেন। প্রতিটি সিরিয়ালাইজার একটি নির্দিষ্ট প্লাগইন বা সিস্টেমের অবস্থাকে সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করার জন্য দায়ী।

সংরক্ষণ এবং লোড হচ্ছে

কর্মক্ষেত্র

আপনি workspaces নেমস্পেসে save এবং load পদ্ধতিতে কল করে একটি সম্পূর্ণ ওয়ার্কস্পেসের অবস্থাকে সিরিয়ালাইজ বা ডিসিরিয়ালাইজ করতে পারেন।

const state = Blockly.serialization.workspaces.save(myWorkspace);
Blockly.serialization.workspaces.load(state, myWorkspace);

এই কলগুলি কর্মক্ষেত্রের সাথে নিবন্ধিত সমস্ত পৃথক সিস্টেম (সিরিয়ালাইজার দ্বারা উপস্থাপিত) সিরিয়ালাইজ বা ডিসিরিয়ালাইজ করে।

স্বতন্ত্র ব্লক

আপনি blocks নেমস্পেসে save এবং append পদ্ধতিতে কল করে পৃথক ব্লকগুলিকে সিরিয়ালাইজ বা ডিসিরিয়ালাইজ করতে পারেন।

const blockJson = Blockly.serialization.blocks.save(myBlock);
const duplicateBlock =
    Blockly.serialization.blocks.append(blockJson, myWorkspace);

স্বতন্ত্র সিস্টেম

আপনি সংশ্লিষ্ট সিরিয়ালাইজার তৈরি করে এবং এর save এবং load পদ্ধতিগুলিকে কল করে পৃথক সিস্টেমগুলি (যেমন ব্লক, ভেরিয়েবল, প্লাগইন ইত্যাদি) সিরিয়ালাইজ বা ডিসিরিয়ালাইজ করতে পারেন।

// Saves only the variables information for the workspace.
const serializer = new Blockly.serialization.variables.VariableSerializer();
const state = serializer.save(myWorkspace);
serializer.load(state, myWorkspace);

ডিসিরিয়ালাইজেশন অর্ডার

JSON সিস্টেমে একটি স্পষ্ট ডিসিরিয়ালাইজেশন অর্ডার রয়েছে, যা সংরক্ষণের মধ্যে সদৃশ অবস্থা প্রতিরোধ করা সহজ করে তোলে।

যখন Blockly.serialization.workspaces.load বলা হয়, তখন সিরিয়ালাইজারদের অগ্রাধিকারের ক্রমে ডিসিরিয়ালাইজ করার জন্য স্টেট দেওয়া হয়। এটি সিরিয়ালাইজার বিভাগে আরও ব্যাখ্যা করা হয়েছে, এবং এর উদ্দেশ্য হল সিরিয়ালাইজারদের অন্যান্য সিস্টেম থেকে রাষ্ট্রের উপর নির্ভর করার অনুমতি দেওয়া।

অন্তর্নির্মিত সিরিয়ালাইজারগুলির ডিসিরিয়ালাইজেশনের ক্রম হল:

  1. পরিবর্তনশীল মডেল deserialized হয়.
  2. পদ্ধতি মডেল deserialized হয়.
  3. ব্লক deserialized হয়. স্বতন্ত্র শীর্ষ-স্তরের ব্লকগুলি একটি নির্বিচারে ক্রমানুসারে ডিসিরিয়ালাইজ করা হয়।
    1. টাইপ deserialized হয়. এটি ব্লক তৈরি করে, এর init পদ্ধতি ট্রিগার করে এবং এক্সটেনশনে মিশ্রিত করে।
    2. গুণাবলী deserialized হয়. এর মধ্যে এমন বৈশিষ্ট্য রয়েছে যা যেকোনো ব্লকে প্রযোজ্য হতে পারে। যেমন: x, y, কম্পিত, অক্ষম, এবং ডেটা।
    3. অতিরিক্ত রাষ্ট্র deserialized হয়. আরও তথ্যের জন্য এক্সটেনশন এবং মিউটেটর ডকুমেন্টেশন দেখুন।
    4. ব্লকটি তার পিতামাতার সাথে সংযুক্ত (যদি একটি বিদ্যমান থাকে)।
    5. আইকনগুলি ডিসিরিয়ালাইজ করা হয়েছে। স্বতন্ত্র আইকন একটি নির্বিচারে ক্রমবিন্যাস করা হয়.
    6. ক্ষেত্রগুলি ডিসিরিয়ালাইজ করা হয়। স্বতন্ত্র ক্ষেত্রগুলি একটি নির্বিচারে ক্রমবিন্যাস করা হয়।
    7. ইনপুট ব্লক deserialized হয়. এতে মান ইনপুট এবং স্টেটমেন্ট ইনপুটগুলির সাথে সংযুক্ত ব্লকগুলি অন্তর্ভুক্ত রয়েছে। স্বতন্ত্র ইনপুটগুলি একটি নির্বিচারে ক্রমানুসারে ডিসিরিয়ালাইজ করা হয়।
    8. পরবর্তী ব্লকগুলি ডিসিরিয়ালাইজ করা হয়।

যখন অতিরিক্ত রাষ্ট্র সংরক্ষণ করতে হবে

ব্লকগুলির জন্য, যদি আপনার ক্রমানুসারে কম কিছু থাকে যা অর্ডারে উচ্চতর কিছুর উপর নির্ভর করে, তাহলে আপনাকে সেই ডেটা ডুপ্লিকেট করতে হবে এবং আপনার অতিরিক্ত অবস্থায় যোগ করতে হবে।

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

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

নোট করুন যে ডুপ্লিকেট স্টেট সম্পর্কে নিয়মটিও বিবেচনা করা উচিত যে ব্লক স্ট্যাক, আইকন, ক্ষেত্র এবং ইনপুট ব্লকগুলি একটি ইচ্ছাকৃত ক্রমে ডিসিরিয়ালাইজ করা হয়েছে। উদাহরণ স্বরূপ, যদি আপনার একটি ক্ষেত্র B থাকে যা শুধুমাত্র অন্য একটি ক্ষেত্রের A এর নির্দিষ্ট মান থাকলেই বিদ্যমান থাকে, তাহলে A-এর আগে B ডিসিরিয়ালাইজ করা হলে আপনার অতিরিক্ত অবস্থায় A সম্পর্কে তথ্য যোগ করা উচিত।

ব্লক হুক

কিভাবে ব্লকে অতিরিক্ত সিরিয়ালাইজেশন যোগ করতে হয় সে সম্পর্কে তথ্যের জন্য, এক্সটেনশন এবং মিউটেটর ডকুমেন্টেশন দেখুন।

ফিল্ড হুক

ক্ষেত্রগুলিকে কীভাবে সিরিয়ালাইজ করতে হয় সে সম্পর্কে তথ্যের জন্য, কাস্টম ক্ষেত্র ডকুমেন্টেশন দেখুন।

সিরিয়ালাইজার হুক

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

অতিরিক্ত সিরিয়ালাইজারগুলি প্রায়শই একটি প্লাগইনের অবস্থাকে সিরিয়ালাইজ এবং ডিসিরিয়ালাইজ করতে ব্যবহৃত হয়।

Blockly.serialization.registry.register(
    'workspace-comments',  // Name
    {
      save: saveFn,      // Save function
      load: loadFn,      // Load function
      clear: clearFn,    // Clear function
      priority: 10,      // Priority
    });

আপনি যখন একটি সিরিয়ালাইজার নিবন্ধন করবেন তখন আপনাকে অবশ্যই বেশ কিছু জিনিস প্রদান করতে হবে:

  • সিরিয়ালাইজারের একটি নাম, যার অধীনে ডেটাও সংরক্ষণ করা হয়।
  • সিরিয়ালাইজারের সাথে যুক্ত প্লাগইন/সিস্টেমের অবস্থা save জন্য একটি ফাংশন।
  • রাষ্ট্র clear জন্য একটি ফাংশন।
  • স্টেট load জন্য একটি ফাংশন।
  • একটি priority , যা ডিসিরিয়ালাইজেশন অর্ডার নির্ধারণ করতে ব্যবহৃত হয়।

    আপনি অন্তর্নির্মিত অগ্রাধিকারের উপর আপনার সিরিয়ালাইজারের অগ্রাধিকার ভিত্তি করতে পারেন

যখন Blockly.serialization.workspaces.save কল করা হয়, প্রতিটি সিরিয়ালাইজারের save ফাংশন কল করা হবে, এবং এর ডেটা চূড়ান্ত JSON আউটপুটে যোগ করা হবে:

{
  "blocks": { ... },
  "workspaceComments": [ // Provided by workspace-comments serializer
    {
      "x": 239,
      "y": 31,
      "text": "Add 2 + 2"
    },
    // etc...
  ]
}

যখন Blockly.serialization.workspaces.load কল করা হয়, তখন প্রতিটি সিরিয়ালাইজার অগ্রাধিকারের ক্রমে ট্রিগার হয়। কম ইতিবাচক অগ্রাধিকার মান সহ সিরিয়ালাইজারদের আগে আরও ইতিবাচক অগ্রাধিকার মান সহ সিরিয়ালাইজারগুলি ট্রিগার করা হয়।

যখন একটি সিরিয়ালাইজার ট্রিগার করা হয়, তখন দুটি জিনিস ঘটে:

  1. প্রদত্ত clear ফাংশন বলা হয়. এটি নিশ্চিত করে যে আরও স্টেট লোড হওয়ার আগে আপনার প্লাগইন/সিস্টেমের অবস্থা পরিষ্কার। উদাহরণস্বরূপ, ওয়ার্কস্পেস-মন্তব্য সিরিয়ালাইজার ওয়ার্কস্পেস থেকে বিদ্যমান সমস্ত মন্তব্য মুছে ফেলবে।
  2. প্রদত্ত load ফাংশন বলা হয়।

XML সিস্টেম

XML সিস্টেম আপনাকে একটি XML নোডে আপনার ওয়ার্কস্পেসকে সিরিয়ালাইজ করতে দেয়। এটি ছিল ব্লকলির মূল সিরিয়ালাইজেশন সিস্টেম। এটি এখন আইসবক্স করা হয়েছে, যার মানে এটি নতুন বৈশিষ্ট্যগুলি পাবে না। যেমন, আমরা সম্ভব হলে JSON সিস্টেম ব্যবহার করার পরামর্শ দিই।

এপিআই

XML সিস্টেমের API সম্পর্কে তথ্যের জন্য রেফারেন্স ডকুমেন্টেশন দেখুন।

ব্লক হুক

কিভাবে ব্লকে অতিরিক্ত সিরিয়ালাইজেশন যোগ করতে হয় সে সম্পর্কে তথ্যের জন্য, এক্সটেনশন এবং মিউটেটর ডকুমেন্টেশন দেখুন।

ফিল্ড হুক

ক্ষেত্রগুলিকে কীভাবে সিরিয়ালাইজ করতে হয় সে সম্পর্কে তথ্যের জন্য, কাস্টম ক্ষেত্র ডকুমেন্টেশন দেখুন।

JSON এবং XML এর মধ্যে নির্বাচন করা হচ্ছে

আমরা XML এর উপর JSON সিরিয়ালাইজার সুপারিশ করি। JSON সিস্টেম আপনাকে জাভাস্ক্রিপ্ট অবজেক্টে আপনার ওয়ার্কস্পেসের অবস্থাকে সিরিয়ালাইজ করার অনুমতি দেয়। এটি সুবিধাজনক কারণ:

  1. JSON সংকুচিত করা বা অন্য ফর্ম্যাটে রূপান্তর করা সহজ।
  2. JSON প্রোগ্রামের সাথে কাজ করা সহজ।
  3. JSON প্রসারিত করা এবং ডেটা যুক্ত করা সহজ।

উপরন্তু, XML সিস্টেম আর আপডেট পাবে না, এবং এটিতে ইতিমধ্যে JSON সিরিয়ালাইজারের তুলনায় বৈশিষ্ট্যের অভাব রয়েছে। উদাহরণস্বরূপ, আপনি সহজেই অতিরিক্ত ডেটা সংরক্ষণ এবং লোড করতে আপনার নিজস্ব JSON সিরিয়ালাইজার নিবন্ধন করতে পারেন, যেমন প্লাগইনগুলির জন্য ডেটা বা আপনার যোগ করা কাস্টমাইজেশন৷ XML সিস্টেমে এটা সম্ভব নয়।

আপনি যদি পূর্বে XML সিরিয়ালাইজেশন ব্যবহার করে থাকেন, তাহলে কিভাবে আপগ্রেড করবেন সে সম্পর্কে তথ্যের জন্য মাইগ্রেশন গাইড দেখুন।