পণ্যের খবর

রুম ৩.০ - রুমের আধুনিকীকরণ

৪ মিনিটের পাঠ
Daniel Santiago Rivera
সফটওয়্যার ইঞ্জিনিয়ার

Room 3.0-এর প্রথম আলফা সংস্করণ প্রকাশিত হয়েছে! Room 3.0 হলো লাইব্রেরিটির একটি যুগান্তকারী সংস্করণ, যা কোটলিন মাল্টিপ্ল্যাটফর্ম (KMP)-এর উপর আলোকপাত করে এবং বিদ্যমান অ্যান্ড্রয়েড, আইওএস ও জেভিএম ডেস্কটপ সাপোর্টের পাশাপাশি জাভাস্ক্রিপ্ট ও ওয়েবঅ্যাসেম্বলি (WASM)-এর সাপোর্টও যুক্ত করেছে।

এই ব্লগে আমরা রুম ৩.০-এর বড় ধরনের পরিবর্তনগুলো, এর পেছনের যুক্তি এবং রুম ২.০ থেকে মাইগ্রেট করার জন্য আপনি কী কী করতে পারেন, তা তুলে ধরেছি।

ব্রেকিং পরিবর্তন

রুম ৩.০-তে নিম্নলিখিত ব্রেকিং এপিআই পরিবর্তনগুলো অন্তর্ভুক্ত করা হয়েছে:

  • SQLite API-এর সমর্থন প্রত্যাহার: Room 3.0 সম্পূর্ণরূপে androidx.sqlite ড্রাইভার API দ্বারা সমর্থিত। SQLiteDriver API-গুলো KMP-সামঞ্জস্যপূর্ণ এবং Android-এর API-এর উপর Room-এর নির্ভরতা দূর করায় Android-এর জন্য API সারফেস সরল হয়, কারণ এতে দুটি সম্ভাব্য ব্যাকএন্ডের প্রয়োজনীয়তা এড়ানো যায়।
  • জাভা কোড জেনারেশনের আর প্রয়োজন নেই: রুম ৩.০ শুধুমাত্র কোটলিন কোড জেনারেট করে। এটি ক্রমবিকাশমান ‘কোটলিন-ফার্স্ট’ প্যারাডাইমের সাথে সামঞ্জস্যপূর্ণ এবং একই সাথে কোডবেস ও ডেভেলপমেন্ট প্রক্রিয়াকে সরল করে, যার ফলে দ্রুততর পুনরাবৃত্তি সম্ভব হয়।
  • KSP-এর উপর মনোযোগ: আমরা Java Annotation Processing (AP) এবং KAPT-এর জন্য সমর্থনও বন্ধ করে দিচ্ছি। Room 3.0 সম্পূর্ণরূপে একটি KSP (Kotlin Symbol Processing) প্রসেসর, যা জাভা ভাষার সীমাবদ্ধতা ছাড়াই কোটলিন কোডবেসের উন্নততর প্রক্রিয়াকরণের সুযোগ করে দেয়।
  • কোরাউটিনই প্রথম: Room 3.0 কোটলিন কোরাউটিন গ্রহণ করেছে, যা এর API-গুলোকে কোরাউটিন-ফার্স্ট করে তুলেছে। কোরাউটিন হলো KMP-কম্প্যাটিবল অ্যাসিঙ্ক্রোনাস ফ্রেমওয়ার্ক এবং ওয়েব প্ল্যাটফর্মগুলোকে সাপোর্ট করার জন্য Room-কে স্বভাবতই অ্যাসিঙ্ক্রোনাস করে তোলা একটি অত্যন্ত গুরুত্বপূর্ণ শর্ত।

একটি নতুন প্যাকেজ

বিদ্যমান Room 2.x ইমপ্লিমেন্টেশনগুলোর সাথে সামঞ্জস্যের সমস্যা এড়াতে এবং Room-এর উপর ট্রানজিটিভ ডিপেন্ডেন্সি আছে এমন লাইব্রেরিগুলোর (যেমন, WorkManager) জন্য, Room 3.0 একটি নতুন প্যাকেজে রাখা হয়েছে। এর ফলে এটির একটি নতুন মেভেন গ্রুপ এবং আর্টিফ্যাক্ট আইডি-ও রয়েছে। উদাহরণস্বরূপ, androidx.room:room-runtime নাম পরিবর্তন করে androidx.room3:room3-runtime রাখা হয়েছে এবং androidx.room.RoomDatabase এর মতো ক্লাসগুলো এখন androidx.room3.RoomDatabase এ অবস্থিত হবে।

কোটলিন এবং কোরাউটিন প্রথমে

জাভা কোড জেনারেশন আর না থাকায়, Room 3.0-এর সাথে ইন্টারঅ্যাক্ট করা কোডবেস জাভাতে হলেও KSP এবং Kotlin কম্পাইলার প্রয়োজন। একটি মাল্টি-মডিউল প্রজেক্ট রাখার পরামর্শ দেওয়া হয় যেখানে Room-এর ব্যবহার কেন্দ্রীভূত থাকবে এবং Kotlin Gradle Plugin ও KSP কোডবেসের বাকি অংশকে প্রভাবিত না করেই প্রয়োগ করা যাবে।

রুম ৩.০-এর জন্য কোরাউটিন এবং আরও নির্দিষ্টভাবে বললে ডিএও (DAO) ফাংশনগুলোকে সাসপেন্ডিং হতে হয়, যদি না সেগুলো ফ্লো (Flow)-এর মতো কোনো রিঅ্যাক্টিভ টাইপ রিটার্ন করে। রুম ৩.০ ব্লকিং ডিএও ফাংশন অনুমোদন করে না। আপনার অ্যাপ্লিকেশনে কোরাউটিন ইন্টিগ্রেট করা শুরু করার জন্য অ্যান্ড্রয়েডে কোরাউটিন বিষয়ক ডকুমেন্টেশন দেখুন।

SQLiteDriver API-তে স্থানান্তর

SupportSQLite থেকে সরে আসার সাথে সাথে, অ্যাপগুলোকে SQLiteDriver API-তে মাইগ্রেট করতে হবে। Room 3.0-এর সম্পূর্ণ সুবিধাগুলো কাজে লাগানোর জন্য এই মাইগ্রেশন অপরিহার্য, যার মধ্যে BundledSQLiteDriver এর মাধ্যমে বান্ডেল করা SQLite লাইব্রেরি ব্যবহারের সুযোগও রয়েছে। আপনি আজই Room 2.7.0+ দিয়ে ড্রাইভার API-তে মাইগ্রেট করা শুরু করতে পারেন। আমরা আপনাকে SupportSQLite-এর আর কোনো ব্যবহার না করার জন্য দৃঢ়ভাবে উৎসাহিত করছি। আপনি যদি আপনার Room ইন্টিগ্রেশনগুলোকে SQLiteDriver API-তে মাইগ্রেট করেন, তাহলে Room 3.0-তে রূপান্তর আরও সহজ হবে, কারণ প্যাকেজ পরিবর্তনের ক্ষেত্রে মূলত সিম্বল রেফারেন্স (ইম্পোর্ট) আপডেট করতে হয় এবং কল-সাইটগুলোতে সামান্য কিছু পরিবর্তনের প্রয়োজন হতে পারে।

SQLiteDriver API-গুলো সম্পর্কে সংক্ষিপ্ত ধারণা পেতে, SQLiteDriver API ডকুমেন্টেশন দেখুন।

Room-কে SQLiteDriver API ব্যবহারে মাইগ্রেট করার পদ্ধতি সম্পর্কে আরও বিস্তারিত জানতে, SupportSQLite থেকে মাইগ্রেট করার অফিসিয়াল ডকুমেন্টেশন দেখুন।

রুম সাপোর্ট SQLite র‍্যাপার

আমরা বুঝতে পারি যে সব প্রোজেক্টের জন্য SupportSQLite সম্পূর্ণরূপে অপসারণ করা তাৎক্ষণিকভাবে সম্ভব নাও হতে পারে। এই রূপান্তরকে সহজ করার জন্য, Room 2.0 সিরিজের সর্বশেষ সংস্করণ Room 2.8.0-তে androidx.room:room-sqlite-wrapper নামে একটি নতুন আর্টিফ্যাক্ট চালু করা হয়েছে। এই আর্টিফ্যাক্টটি একটি কম্প্যাটিবিলিটি এপিআই প্রদান করে, যা আপনাকে একটি RoomDatabase SupportSQLiteDatabase এ রূপান্তর করার সুযোগ দেয়, এমনকি যদি একটি SQLiteDriver ইনস্টল থাকার কারণে ডেটাবেসের SupportSQLite এপিআইগুলো নিষ্ক্রিয় করা হয়ে থাকে। এটি সেইসব ডেভেলপারদের জন্য একটি অস্থায়ী সমাধান প্রদান করে, যাদের তাদের কোডবেস সম্পূর্ণরূপে মাইগ্রেট করার জন্য আরও সময়ের প্রয়োজন। এই আর্টিফ্যাক্টটি Room 3.0-তে androidx.room3:room3-sqlite-wrapper হিসেবে বিদ্যমান রয়েছে, যা Room 3.0-তে মাইগ্রেশন সক্ষম করার পাশাপাশি গুরুত্বপূর্ণ SupportSQLite ব্যবহারকেও সমর্থন করে।

উদাহরণস্বরূপ, roomDatabase.openHelper.writableDatabase এর ব্যবহারকে roomDatabase.getSupportWrapper() দ্বারা প্রতিস্থাপন করা যেতে পারে এবং Room-এর বিল্ডারে setDriver() কল করা হলেও একটি র‍্যাপার প্রদান করা হবে।

আরও বিস্তারিত জানতে room-sqlite-wrapper ডকুমেন্টেশন দেখুন।

রুম এবং SQLite ওয়েব সাপোর্ট

কোটলিন মাল্টিপ্ল্যাটফর্ম টার্গেট JS এবং WasmJS-এর জন্য সাপোর্ট কিছু সবচেয়ে গুরুত্বপূর্ণ API পরিবর্তন নিয়ে এসেছে। বিশেষ করে, Room 3.0-এর অনেক API হলো সাসপেন্ড ফাংশন, কারণ ওয়েব স্টোরেজের জন্য সঠিক সাপোর্ট অ্যাসিঙ্ক্রোনাস। SQLiteDriver API-গুলোও ওয়েব সাপোর্টের জন্য আপডেট করা হয়েছে এবং androidx.sqlite:sqlite-web এ একটি নতুন ওয়েব অ্যাসিঙ্ক্রোনাস ড্রাইভার পাওয়া যাচ্ছে। এটি একটি ওয়েব ওয়ার্কার ভিত্তিক ড্রাইভার যা অরিজিন প্রাইভেট ফাইল সিস্টেমে (OPFS) ডাটাবেস পারসিস্ট করতে সক্ষম করে।

Room for the Web কীভাবে সেট আপ করবেন সে সম্পর্কে আরও বিস্তারিত জানতে Room 3.0 রিলিজ নোট দেখুন।

কাস্টম ডিএও রিটার্ন টাইপ

Room 3.0-তে RxJava এবং Paging-এর মতো কাস্টম ইন্টিগ্রেশন যোগ করার সুবিধা আনা হয়েছে। @DaoReturnTypeConverter নামক একটি নতুন অ্যানোটেশন API-এর মাধ্যমে আপনি আপনার নিজস্ব ইন্টিগ্রেশন তৈরি করতে পারেন, যার ফলে Room-এর জেনারেটেড কোড রানটাইমে অ্যাক্সেসযোগ্য হয়ে ওঠে। এর ফলে, Room টিমের সাপোর্ট যোগ করার জন্য অপেক্ষা না করেই @Dao ফাংশনগুলো তাদের নিজস্ব কাস্টম রিটার্ন টাইপ ব্যবহার করতে পারে। বিদ্যমান ইন্টিগ্রেশনগুলোকে এই কার্যকারিতা ব্যবহার করার জন্য মাইগ্রেট করা হয়েছে এবং তাই যারা এটির উপর নির্ভর করেন, তাদের এখন @Database বা @Dao ডেফিনিশনে কনভার্টারগুলো যোগ করতে হবে।

উদাহরণস্বরূপ, পেজিং কনভার্টারটি androidx.room3:room3-paging আর্টিফ্যাক্টে অবস্থিত এবং এর নাম PagingSourceDaoReturnTypeConverter । অপরদিকে, LiveData জন্য কনভার্টারটি androidx.room3:room3-livedata তে রয়েছে এবং এর নাম LiveDataDaoReturnTypeConverter

আরও বিস্তারিত জানতে Room 3.0 রিলিজ নোটের DAO রিটার্ন টাইপ কনভার্টারস সেকশনটি দেখুন।

রুম ২.x এর রক্ষণাবেক্ষণ মোড

যেহেতু Room-এর উন্নয়ন Room 3-কে কেন্দ্র করে হবে, তাই Room 2.x-এর বর্তমান সংস্করণটি রক্ষণাবেক্ষণ মোডে প্রবেশ করছে। এর মানে হলো, কোনো বড় ফিচার তৈরি করা হবে না, তবে বাগ ফিক্স এবং ডিপেন্ডেন্সি আপডেটসহ প্যাচ রিলিজ (যেমন 2.8.1, 2.8.2 ইত্যাদি) যথারীতি প্রকাশিত হতে থাকবে। Room 3 স্থিতিশীল না হওয়া পর্যন্ত টিম এই কাজটি চালিয়ে যেতে প্রতিশ্রুতিবদ্ধ।

শেষ কথা

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

    লিখেছেন:

    পড়তে থাকুন