اخبار محصول

اتاق ۳.۰ - مدرن‌سازی اتاق

مطالعه ۴ دقیقه‌ای
Daniel Santiago Rivera
مهندس نرم‌افزار

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

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

شکستن تغییرات

اتاق ۳.۰ شامل تغییرات اساسی API زیر است:

  • حذف APIهای SupportSQLite: روم ۳.۰ به طور کامل توسط APIهای درایور androidx.sqlite پشتیبانی می‌شود. APIهای SQLiteDriver با KMP سازگار هستند و حذف وابستگی روم به API اندروید، سطح API را برای اندروید ساده می‌کند زیرا از داشتن دو backend احتمالی جلوگیری می‌کند.
  • دیگر خبری از تولید کد جاوا نیست: Room 3.0 منحصراً کد کاتلین تولید می‌کند. این با الگوی در حال تکامل کاتلین-اول همسو است، اما همچنین کدبیس و فرآیند توسعه را ساده می‌کند و امکان تکرار سریع‌تر را فراهم می‌کند.
  • تمرکز روی KSP: ما همچنین پشتیبانی از پردازش حاشیه‌نویسی جاوا (AP) و KAPT را متوقف می‌کنیم. Room 3.0 صرفاً یک پردازنده KSP (پردازش نمادهای کاتلین) است که امکان پردازش بهتر کدهای کاتلین را بدون محدود شدن به زبان جاوا فراهم می‌کند.
  • کوروتین‌ها در اولویت هستند: Room 3.0 از کوروتین‌های کاتلین پشتیبانی می‌کند و APIهای آن را در اولویت کوروتین قرار می‌دهد. کوروتین‌ها چارچوب ناهمزمان سازگار با KMP هستند و ناهمزمان کردن Room به طور ذاتی یک الزام حیاتی برای پشتیبانی از پلتفرم‌های وب است.

یک بسته جدید

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

کاتلین و کوروتین‌ها اول

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

اتاق ۳.۰ همچنین به Coroutineها نیاز دارد و به طور خاص‌تر، توابع DAO باید در حالت تعلیق باشند، مگر اینکه یک نوع واکنشی مانند Flow را برگردانند. اتاق ۳.۰ توابع DAO مسدودکننده را مجاز نمی‌داند. برای شروع ادغام Coroutineها در برنامه خود، به مستندات Coroutineها در اندروید مراجعه کنید.

مهاجرت به APIهای SQLiteDriver

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

برای مرور مختصری از APIهای SQLiteDriver، مستندات SQLiteDriver APIs را بررسی کنید.

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

پشتیبانی از اتاقبسته‌بندی SQLite

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

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

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

پشتیبانی وب روم و SQLite

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

برای جزئیات بیشتر در مورد نحوه راه‌اندازی Room for the Web، به یادداشت‌های انتشار Room 3.0 مراجعه کنید.

انواع بازگشتی DAO سفارشی

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

برای مثال، مبدل Paging در فایل androidx.room3:room3-paging قرار دارد و PagingSourceDaoReturnTypeConverter نام دارد. در همین حال، مبدل LiveData در فایل androidx.room3:room3-livedata قرار دارد و LiveDataDaoReturnTypeConverter نام دارد.

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

حالت نگهداری اتاق ۲.x

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

افکار نهایی

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

    نوشته شده توسط:

    ادامه مطلب