মিউটেবল লাইভডেটা লাইভ ডেটা থেকে প্রসারিত হচ্ছে। লাইভডাটার সুরক্ষিত পদ্ধতিগুলি কেবল স্ব বা সাবক্লাস দ্বারা সম্বোধন করা যেতে পারে। সুতরাং এক্ষেত্রে মিউটেবল লাইভডেটা লাইভডাটার একটি সাব ক্লাস হওয়া এই সুরক্ষিত পদ্ধতিগুলি অ্যাক্সেস করতে পারে।
আপনি যা করতে চান তা একটি নজরে পর্যবেক্ষণ করা হয় এবং দেখুন যে কোনও পরিবর্তন আছে কিনা। তবে একই সময়ে আপনি কোনও "বহিরাগত" চান না যে নজিরটি আপনি পর্যবেক্ষণ করছেন তা পরিবর্তন করুন। এক অর্থে এটি একটি সমস্যা তৈরি করে, যেমন আপনি চান যে কোনও বিষয় যা পরিবর্তনযোগ্য এবং পরিবর্তনযোগ্য নয়, কোনও নতুন অবস্থা আপডেট করতে পারে এবং পরিবর্তনযোগ্য নয়, যাতে নিশ্চিত হওয়া যায় যে কেউ এই উদাহরণটি আপডেট করতে পারে না। এই দুটি বৈশিষ্ট্য একে অপরের সাথে বিরোধ করে তবে অতিরিক্ত স্তর তৈরি করে সমাধান করা যায়।
সুতরাং আপনি যা করছেন তা হ'ল আপনার ক্লাস, লাইভডাটা, এমন একটি ক্লাসের সাথে প্রসারিত করুন যা এর পদ্ধতিগুলি অ্যাক্সেস করতে পারে। সাব লেয়ার, এক্ষেত্রে পরিবর্তনীয় লাইভডেটা, তার পিতামাতার সুরক্ষিত পদ্ধতিগুলি (/ সুপার) অ্যাক্সেস করতে সক্ষম।
এখন আপনি দৃষ্টান্ত তৈরি করতে শুরু করুন এবং মিউটেবল লাইভডাটা সম্পর্কিত আপনার পর্যবেক্ষক উদাহরণ তৈরি করুন। একই সময়ে আপনি এই একই উদাহরণটিকে উল্লেখ করে একটি লাইভ ডেটা উদাহরণ তৈরি করেন। মিউটেবল লাইভডাটা ডেটা লাইভডাটা প্রসারিত করার কারণে যে কোনও মিউটেবল লাইভডাটা ডেটা হ'ল লাইভ ডেটা অবজেক্ট এবং তাই লাইভডাটা ভেরিয়েবল দ্বারা রেফারেন্স করা যায়।
এখন কৌশল প্রায় সম্পন্ন হয়েছে। আপনি কেবল লাইভডেটা উদাহরণটি উন্মোচন করেছেন, কেউ এর সুরক্ষিত পদ্ধতিগুলি ব্যবহার করতে পারে না, এবং এটি এটি সুপারের কাছে কাস্ট করতে পারে না (সম্ভবত সংকলন সময়ে, তবে এটি চলবে না: রানটাইম ত্রুটি)। এবং আপনি প্রকৃত উপ-শ্রেণীর উদাহরণটি ব্যক্তিগত রাখেন, সুতরাং উদাহরণের পদ্ধতিগুলি ব্যবহার করে যারা কেবল উদাহরণটির মালিক তাদেরাই এটি পরিবর্তন করতে পারবেন।
//create instance of the sub class and keep this private
private val _name: MutableLiveData<String> = MutableLiveData<String>()
//create an instance of the super class referring to the same instance
val name: LiveData<String> = _name
name.value.observe(.....)
যখন কোনও পরিবর্তন প্রয়োগ করা হয় তখন সুপার ক্লাসটি সূচিত করে।
_name.postValue(...)
ব্লককোট সাধারণভাবে বলতে গেলে, উত্তরাধিকারের এমন এক ধরণের (একমাত্র পরিবর্তনের নির্দিষ্ট কিছু পদ্ধতির দৃশ্যমানতা বাড়ানো) একটি সুপরিচিত অনুশীলন এবং এমন কিছু পরিস্থিতিতে কী রয়েছে যেখানে এটি কার্যকর হতে পারে (ধরে নিই আমরা সমস্ত কোডের অ্যাক্সেস পেয়েছি)?
হ্যাঁ, এটি বেশ সুপরিচিত এবং উপরে বর্ণিত এটি একটি সাধারণ দৃশ্য। পর্যবেক্ষক প্যাটার্নটি সরিয়ে ফেলুন, এবং সেট থেকে তৈরি / ফর্ম আকারে তৈরি করুন এটির থেকে যতটা উপকার হবে। নির্ভর করে আপনি কোথায় এটি প্রয়োগ করেন, শেষ পর্যন্ত কোনও সুবর্ণ নিয়ম নেই।
LiveData
অপরিবর্তনীয়, যেহেতু ক্লায়েন্ট অভ্যন্তরীণ রাষ্ট্র পরিবর্তন করতে পারে না, তাই থ্রেড-নিরাপদ