amin.mir
amin.mir
خواندن ۲ دقیقه·۶ سال پیش

قسمت دوم:ایجاد reactive repository با room و retrofit

با سلام .

در قسمت قبل با ادپتر روم و اپراتورهاش و همینظور نوع انتشارشون در شرایط مختلف آشنا شدیم.در این قسمت میخواهیم از ویژگی ها ادپتر استفاده کنیم تا بر اساس سناریو کارمون دیتارو منتشر کنیم .

من سه حالت رو برای شما آماده کردم درموارد پایین api , db به ترتیب نمونه ای از اینترفیس دیتابیس و ای پی آی هستند . متد های نوشته شده متد های repository هستند.

حالت اول : قصدم اینه یوزر رو از دیتا بیس بخوانم و اگر وجود نداشت از آی پی آی اونرو بگیرم و هم ذخیره کنم هم به یوآی بفرستم :

https://gist.github.com/amin3536/0d8cece1aaedc230495a25b44852c4ed

قبلا خواندیم در صورتی که یوزر در دیتابیس نباشه سینگل متد ارور رو فراخونی میکنه و ما از همین مورد استفاده کردم که ای ای پی آی فراخوانی کنیم البته در این مورد دیتا فقط یکبار از دیتا بیس خوانده میشود.

حالت دوم : قصد ما اینه اگه اینترنت وصل بود همیشه به روز ترینن دیتا ها روی یو آی داشته باشیم .

https://gist.github.com/amin3536/760842fa9e0bf366a2f4cbd18a03161e

در مرود این حالت دیتابیس ماننده یک لایه کچ عمل میکنه و همیشه به روزترین دیتارو میتونیم در یو آی داشته باشیم.


حالت سوم: (ی جورای قرار حالت اول و دوم میخواییم ادغام کنیم ) در صورتی که بخواییم که درخواست ما ری اکتیو باشه(در صورت اپدیت یوزر یوزر جدید منتشر بشه ) و در صورت نبود (فقط در صورت نبودش) از ای پی آی اونرو بگیریم ولی همیشه به روز ترین دیتارو داشته باشیم(از ای پی آی نیست پس از کجا بروز باشه ؟) . زمانی این مورد بدر میخوره که قرار دیتارو از جایی غیر ای پی اي هم اپدیتت کنیم( از سرویس یا یک فرگمنت دیگه )‌ و بخواییم تغییرات هم روی یو آی مشاهده کنیم کاربردش هم مثه سبد خرید یا بدج ایکن.


https://gist.github.com/amin3536/a5b396245673683f98fbe3a6b3dd8d57


در مرود استفاده از `Flowable<T>` و `FlowableEmpity();` به جای `Flowable <List<T>>` و چک کردن لیست سایز باید بگم تو این حالت فلوبل تا اونجایی اطلاع دارم در صورت نبود یوزر اصلا متد نکست فراخوانی نمیکنه که بخواد `FlowableEmpity();` رو منتشر کنه ( البته چک نکردم اگه شما کردین کامنت بزارین) پس من این حالت انخاب کردم البته به توصیه (سازنده لایبراری ) .


نکته : شما میتوانید api و db رو به repository تزریق کنید به طور مثال با dagger2.

و خود repository هم به دامین لایر تزریق کنیم . ( قدرت بالای دگر در تزریق ماژول ها تو در تو )


قسمت های قبل

https://virgool.io/pubroid/%D9%82%D8%B3%D9%85%D8%AA-%D8%A7%D9%88%D9%84-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-reactive-repository-%D8%A8%D8%A7-room-%D9%88-retrofit-qwjczgrw6nav


https://virgool.io/pubroid/clean-architecture-do2idxkrdbl3


ممنون از توجه شما منتظر نظراتتون و پیشنهاداتون هستم .






برنامه نویسبرنامه نویسیاندرویدandroid
امین هستم برنامه نویس ، علاقمند به حیطه های فلسفه ، عرفان ،روانشناسی وادبیات هستم. علاقه زیادی به آشنایی با افراد جدید و شندین حرفای اون ها دارم :).
شاید از این پست‌ها خوشتان بیاید