আমার মতে, ইউএনডিও / রেডো বিস্তৃতভাবে 2 উপায়ে প্রয়োগ করা যেতে পারে। 1. কমান্ড স্তর (কমান্ড স্তর পূর্বাবস্থায় / পুনরায় বলা) 2. ডকুমেন্ট স্তর (বিশ্বব্যাপী পূর্বাবস্থায় / পুনরায় বলা হয়)
কমান্ড স্তর: যতগুলি উত্তর নির্দেশ করে, এটি মেমেন্টো প্যাটার্ন ব্যবহার করে দক্ষতার সাথে অর্জন করা হয়েছে। যদি কমান্ডটি অ্যাকশনকে জার্নালাইজিংয়ে সমর্থন করে তবে একটি পুনরায় সহজেই সমর্থন করা যায়।
সীমাবদ্ধতা: কমান্ডের ব্যাপ্তিটি শেষ হয়ে গেলে, পূর্বাবস্থায় ফেরানো অসম্ভব, যা নথির স্তরের দিকে নিয়ে যায় (বিশ্বব্যাপী) পূর্বাবস্থায় / পুনরায় করা
আমার ধারণা আপনার কেসটি বিশ্বব্যাপী পূর্বাবস্থায় ফিরিয়ে আনতে পারে - কারণ এটি এমন মডেলের পক্ষে উপযুক্ত যা এতে প্রচুর স্মৃতি স্থান জড়িত। এছাড়াও, এটি নির্বাচনীভাবে পূর্বাবস্থায় ফেরানো / আবারও করতে উপযুক্ত। দুটি আদিম ধরণের রয়েছে
- সমস্ত স্মৃতি পূর্বাবস্থায় ফেরানো / আবার করা
- বস্তুর স্তর পূর্বাবস্থায় ফেরান
"সমস্ত স্মৃতি পূর্ববর্তী / পুনরায়" এ, সম্পূর্ণ স্মৃতিটিকে সংযুক্ত ডেটা হিসাবে ধরা হয় (যেমন একটি গাছ, বা একটি তালিকা বা গ্রাফ) এবং মেমরিটি ওএসের পরিবর্তে অ্যাপ্লিকেশন দ্বারা পরিচালিত হয়। সুতরাং নতুন এবং অপসারণকারীদের মুছুন যদি সি ++ এ কার্যকরভাবে কার্যকরভাবে কার্যকর করতে আরও নির্দিষ্ট কাঠামো ধারণ করতে ওভারলোড হয় a যদি কোনও নোড সংশোধিত হয়, খ। হোল্ডিং এবং ক্লিয়ারিং ডেটা, ইত্যাদি মূলত পুরো মেমরির অনুলিপি করা (ধরে নেওয়া যে মেমরির বরাদ্দটি ইতিমধ্যে উন্নত অ্যালগরিদম ব্যবহার করে অ্যাপ্লিকেশন দ্বারা অনুকূলিত এবং পরিচালনা করা হয়েছে) এবং এটি একটি স্ট্যাকের মধ্যে সঞ্চয় করে। যদি মেমরির অনুলিপিটি অনুরোধ করা হয় তবে গাছের কাঠামোটি অগভীর বা গভীর অনুলিপির প্রয়োজনের ভিত্তিতে অনুলিপি করা হয়। একটি গভীর অনুলিপি কেবল সেই পরিবর্তনশীলটির জন্য তৈরি করা হয় যা পরিবর্তিত হয়। যেহেতু প্রতিটি পরিবর্তনশীল কাস্টম বরাদ্দ ব্যবহার করে বরাদ্দ করা হয়, অ্যাপ্লিকেশনটি চূড়ান্তভাবে বলবে যখন প্রয়োজন হলে এটি মুছতে হবে। বিষয়গুলি খুব ইন্টারেস্টিং হয়ে যায় যদি এমনটি ঘটে তখন আমাদের পূর্বাবস্থায় / পূর্বাবস্থায় পার্টিশন করতে হয় যখন আমাদের অগ্রগামী-বাছাই করে অপারেশনটির একটি সেট পূর্বাবস্থায় / পূর্বাবস্থায় ফেলা দরকার। এই ক্ষেত্রে, কেবলমাত্র সেই নতুন ভেরিয়েবলগুলি, বা মুছে ফেলা ভেরিয়েবলগুলি বা পরিবর্তিত ভেরিয়েবলগুলিকে একটি পতাকা দেওয়া হবে যাতে পূর্বেই / পূর্বাবস্থায় ফিরে আসা সেই স্মৃতিগুলিকে পূর্বাবস্থায়িত / পুনরায় করণীয় যদি আমাদের কোনও বস্তুর ভিতরে আংশিক পূর্বাবস্থা / পুনরায় কাজ করতে হয় তবে বিষয়গুলি আরও আকর্ষণীয় হয়ে উঠবে। যখন এটি হয়, "ভিজিটার প্যাটার্ন" এর একটি নতুন ধারণা ব্যবহৃত হয়। এটিকে "অবজেক্ট লেভেল পূর্বাবস্থায় / পুনরায়" বলা হয় অথবা মুছে ফেলা ভেরিয়েবল বা পরিবর্তিত ভেরিয়েবলগুলিকে একটি পতাকা দেওয়া হয় যাতে পূর্বাবস্থায় / পূর্বাবস্থায় ফিরুন / পুনরুদ্ধারগুলি সেই মেমরিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন / বিষয়গুলি আরও আকর্ষণীয় হয়ে উঠবে যদি কোনও বস্তুর অভ্যন্তরে আংশিক পূর্বাবস্থায় / পূর্বাবস্থায় কাজ করতে হয়। যখন এটি হয়, "ভিজিটার প্যাটার্ন" এর একটি নতুন ধারণা ব্যবহৃত হয়। এটিকে "অবজেক্ট লেভেল পূর্বাবস্থায় / পুনরায়" বলা হয় অথবা মুছে ফেলা ভেরিয়েবল বা পরিবর্তিত ভেরিয়েবলগুলিকে একটি পতাকা দেওয়া হয় যাতে পূর্বাবস্থায় / পূর্বাবস্থায় ফিরুন / পুনরুদ্ধারগুলি সেই মেমরিটিকে পূর্বাবস্থায় ফিরিয়ে আনুন / বিষয়গুলি আরও আকর্ষণীয় হয়ে উঠবে যদি কোনও বস্তুর অভ্যন্তরে আংশিক পূর্বাবস্থায় / পূর্বাবস্থায় কাজ করতে হয়। যখন এটি হয়, "ভিজিটার প্যাটার্ন" এর একটি নতুন ধারণা ব্যবহৃত হয়। এটিকে "অবজেক্ট লেভেল পূর্বাবস্থায় / পুনরায়" বলা হয়
- অবজেক্ট স্তর পূর্বাবস্থায় ফেরান / পুনরায়: যখন পূর্বাবস্থা / পূর্বাবস্থায় নোটিফিকেশন বলা হয় তখন প্রতিটি বস্তু একটি স্ট্রিমিং অপারেশন প্রয়োগ করে যার মধ্যে স্ট্রিমার বস্তু থেকে পুরানো ডেটা / নতুন ডেটা যা প্রোগ্রাম করা হয়। যে ডেটা বিরক্ত করা হবে না তা নিরবচ্ছিন্ন রেখে দেওয়া হয়েছে। প্রতিটি বস্তু আর্গুমেন্ট হিসাবে একটি স্ট্রিমার পায় এবং ইউএনডিও / রেডো কলের অভ্যন্তরে এটি বস্তুর ডেটা প্রবাহিত / আনস্ট্রিম করে তোলে।
1 এবং 2 উভয়ের ক্ষেত্রেই 1. যেমন 1. আগে ইউন্ডো () 2. আফটার ইউন্ডো () 3 এর আগে রেডো () 4. আফটার রেডো () থাকতে পারে। এই পদ্ধতিগুলিকে বেসিক Undo / redo কমান্ডে প্রকাশ করতে হবে (প্রাসঙ্গিক কমান্ড নয়) যাতে সমস্ত বস্তু সুনির্দিষ্ট ক্রিয়া পেতে এই পদ্ধতিগুলি প্রয়োগ করে।
1 এবং 2 এর একটি সংকর তৈরি করা একটি ভাল কৌশল হ'ল সৌন্দর্য হ'ল এই পদ্ধতিগুলি (1 এবং 2) নিজেরাই কমান্ডের নিদর্শনগুলি ব্যবহার করে