اخبار محصول

Room 3.0 - Modernizing the Room

زمان خواندن: ۴ دقیقه
مشاهده نمایه Daniel Santiago Rivera
Daniel Santiago Rivera مهندس نرم‌افزار

اولین نسخه آلفای Room 3.0 منتشر شد! Room 3.0 نسخه اصلی و ناسازگار کتابخانه است که بر Kotlin Multiplatform (KMP) تمرکز دارد و علاوه‌بر پشتیبانی موجود از Android،‏ iOS، و JVM desktop، پشتیبانی از JavaScript و WebAssembly (WASM) را نیز اضافه می‌کند. 

در این وبلاگ، تغییرات اساسی، دلیل ایجاد Room 3.0، و کارهای مختلفی را که می‌توانید برای انتقال از Room 2.0 انجام دهید شرح می‌دهیم.

تغییرات ناگهانی

‫Room 3.0 شامل تغییرات مخرب زیر در میانای برنامه‌سازی کاربردی است: 

  • حذف میاناهای برنامه‌سازی کاربردی SupportSQLite: Room 3.0 کاملاً توسط میاناهای برنامه‌سازی کاربردی درایور androidx.sqlite پشتیبانی می‌شود. میاناهای برنامه‌سازی کاربردی SQLiteDriver با KMP سازگار هستند و حذف وابستگی Room به میانای برنامه‌سازی کاربردی Android، سطح میانای برنامه‌سازی کاربردی را برای Android ساده می‌کند زیرا از داشتن دو پسوند احتمالی جلوگیری می‌کند.
  • دیگر کد Java تولید نمی‌شود: Room 3.0 منحصراً کد Kotlin تولید می‌کند. این امر با الگوی درحال تکامل Kotlin-first همسو است و همچنین پایگاه کد و فرایند توسعه را ساده‌تر می‌کند و تکرارهای سریع‌تر را امکان‌پذیر می‌سازد.
  • تمرکز بر KSP: همچنین پشتیبانی از Java Annotation Processing (AP) و KAPT را متوقف می‌کنیم. ‫Room 3.0 صرفاً یک پردازنده KSP (پردازش نماد Kotlin) است که امکان پردازش بهتر پایگاه‌های کد Kotlin را بدون محدود شدن به زبان Java فراهم می‌کند.
  • اولویت با روال‌های مشترک: Room 3.0 از روال‌های مشترک Kotlin استقبال می‌کند و میاناهای برنامه‌سازی کاربردی خود را با اولویت روال‌های مشترک طراحی می‌کند. روال‌های همکار چارچوب ناهمگام سازگار با KMP است و ناهمگام کردن Room به‌طور ذاتی یک الزام حیاتی برای پشتیبانی از پلاتفرم‌های وب است.

بسته جدید

برای جلوگیری از مشکلات سازگاری با پیاده‌سازی‌های Room 2.x موجود و برای کتابخانه‌هایی با وابستگی‌های گذرا به Room (برای مثال، WorkManager)،‏ Room 3.0 در بسته جدیدی قرار دارد که به این معنی است که شناسه مصنوع و گروه maven جدیدی نیز دارد. برای مثال، androidx.room:room-runtime به androidx.room3:room3-runtime تبدیل شده است و کلاس‌هایی مثل androidx.room.RoomDatabase اکنون در androidx.room3.RoomDatabase قرار دارند.

Kotlin و روال‌های مشترک در اولویت

با حذف تولید کد جاوا، Room 3.0 همچنین به KSP و کامپایلر Kotlin نیاز دارد، حتی اگر پایگاه کد تعامل‌کننده با Room به زبان جاوا باشد. توصیه می‌شود پروژه‌ای چندماژولی داشته باشید که در آن استفاده از Room متمرکز باشد و بتوان «افزونه Kotlin Gradle» و KSP را بدون تأثیر بر بقیه پایگاه کد اعمال کرد.

Room 3.0 همچنین به Coroutines نیاز دارد و به‌طور خاص توابع DAO باید تعلیق شوند مگر اینکه نوع واکنشی مانند Flow را برگردانند. Room 3.0 مسدود کردن عملکردهای DAO را مجاز نمی‌داند. برای شروع ادغام Coroutines در برنامه‌تان، به سند Coroutines در Android مراجعه کنید.

انتقال به میاناهای برنامه‌سازی کاربردی SQLiteDriver

با کنار گذاشتن SupportSQLite، برنامه‌ها باید به میاناهای برنامه‌سازی کاربردی SQLiteDriver منتقل شوند. این انتقال برای بهره‌برداری کامل از مزایای Room 3.0 ضروری است، ازجمله امکان استفاده از کتابخانه SQLite بسته‌بندی‌شده ازطریق BundledSQLiteDriver. می‌توانید از امروز با Room 2.7.0+‎ انتقال به میاناهای برنامه‌سازی کاربردی درایور را شروع کنید. اکیداً توصیه می‌کنیم از هرگونه استفاده بیشتر از SupportSQLite خودداری کنید. اگر ادغام‌های Room را به میاناهای برنامه‌سازی کاربردی SQLiteDriver منتقل کنید، انتقال به Room 3.0 آسان‌تر خواهد بود زیرا تغییر بسته عمدتاً شامل به‌روزرسانی ارجاع‌های نماد (واردات) است و ممکن است به حداقل تغییرات در سایت‌های فراخوانی نیاز داشته باشد.

برای مروری کوتاه بر میاناهای برنامه‌سازی کاربردی SQLiteDriver، مستندات میاناهای برنامه‌سازی کاربردی SQLiteDriver را بررسی کنید.

برای جزئیات بیشتر درباره نحوه انتقال Room برای استفاده از SQLiteDriver API، مستندات رسمی انتقال از SupportSQLite را بررسی کنید.

بسته‌بندی Room SupportSQLite

می‌دانیم که حذف کامل SupportSQLite ممکن است فوراً برای همه پروژه‌ها امکان‌پذیر نباشد. برای تسهیل این انتقال، Room 2.8.0، جدیدترین نسخه از سری Room 2.0، مصنوع جدیدی به‌نام androidx.room:room-sqlite-wrapper معرفی کرد. این آرتیفکت یک میانای برنامه‌سازی کاربردی سازگاری ارائه می‌دهد که به شما امکان می‌دهد RoomDatabase را به SupportSQLiteDatabase تبدیل کنید، حتی اگر میاناهای برنامه‌سازی کاربردی SupportSQLite در پایگاه داده به‌دلیل نصب SQLiteDriver غیرفعال شده باشند. این امر یک پل موقت برای توسعه‌دهندگانی فراهم می‌کند که برای انتقال کامل پایگاه کد خود به زمان بیشتری نیاز دارند. این آرتیفکت همچنان در Room 3.0 به‌عنوان androidx.room3:room3-sqlite-wrapper وجود دارد تا امکان انتقال به Room 3.0 را فراهم کند و درعین‌حال از استفاده حیاتی SupportSQLite پشتیبانی کند.

برای مثال، فراخوانی‌های roomDatabase.openHelper.writableDatabase را می‌توان با roomDatabase.getSupportWrapper() جایگزین کرد و حتی اگر setDriver() در سازنده Room فراخوانی شود، یک پوشاننده ارائه می‌شود.

برای جزئیات بیشتر، اسناد room-sqlite-wrapper را بررسی کنید.

پشتیبانی وب Room و SQLite

پشتیبانی از Kotlin Multiplatform،‏ JS و WasmJS را هدف قرار می‌دهد و برخی‌از مهم‌ترین تغییرات API را به‌همراه دارد. به‌طور خاص، بسیاری از میاناهای برنامه‌سازی کاربردی در Room 3.0 توابع تعلیق هستند زیرا پشتیبانی مناسب از فضای ذخیره‌سازی وب ناهمگام است. میاناهای برنامه‌سازی کاربردی SQLiteDriver نیز برای پشتیبانی از وب به‌روز شده‌اند و درایور ناهمگام وب جدیدی در androidx.sqlite:sqlite-web دردسترس است. این درایور مبتنی بر Web Worker است که امکان ماندگاری پایگاه داده را در سیستم فایل خصوصی Origin (OPFS) فراهم می‌کند.

برای جزئیات بیشتر درباره نحوه راه‌اندازی Room برای وب، یادداشت‌های انتشار Room 3.0 را بررسی کنید.

Custom DAO Return Types

Room 3.0 قابلیت افزودن ادغام‌های سفارشی به Room را معرفی می‌کند، مشابه RxJava و Paging. ازطریق میانای برنامه‌سازی کاربردی حاشیه‌نویسی جدیدی به‌نام @DaoReturnTypeConverter می‌توانید ادغام خودتان را ایجاد کنید تا کد تولیدشده Room در زمان اجرا دردسترس قرار گیرد، این کار باعث می‌شود توابع @Dao نوع پاسخ سفارشی خود را داشته باشند بدون اینکه لازم باشد منتظر بمانید تا تیم Room پشتیبانی را اضافه کند. ادغام‌های موجود برای استفاده از این عملکرد منتقل می‌شوند و بنابراین اکنون برای کسانی که به آن تکیه می‌کنند لازم است مبدل‌ها را به تعاریف @Database یا @Dao اضافه کنند.

برای مثال، مبدل «صفحه‌بندی» در مصنوع androidx.room3:room3-paging قرار خواهد گرفت و PagingSourceDaoReturnTypeConverter نامیده می‌شود. درهمین‌حال، برای LiveData مبدل در androidx.room3:room3-livedata است و LiveDataDaoReturnTypeConverter نام دارد.

برای جزئیات بیشتر، بخش «مبدل‌های نوع پاسخ DAO» را در یادداشت‌های انتشار Room 3.0 بررسی کنید.

حالت تعمیر و نگهداری Room 2.x

ازآنجایی‌که توسعه Room بر Room 3 متمرکز خواهد بود، نسخه فعلی Room 2.x وارد حالت نگهداری می‌شود. این یعنی هیچ ویژگی مهمی توسعه نخواهد یافت اما نسخه‌های وصله (۲.۸.۱، ۲.۸.۲، و غیره) همچنان با رفع اشکال و به‌روزرسانی‌های وابستگی منتشر خواهند شد. تیم ما متعهد است که این کار را تا زمانی که «اتاق ۳» پایدار شود ادامه دهد.

تفکرات نهایی

ما به‌شدت درباره پتانسیل Room 3.0 و فرصت‌هایی که برای بوم‌سازگان Kotlin ایجاد می‌کند هیجان‌زده هستیم. منتظر به‌روزرسانی‌های بیشتر باشید، زیرا ما این سفر را ادامه می‌دهیم!

نویسنده:
ادامه خواندن