با سلام .
در قسمت قبل با ادپتر روم و اپراتورهاش و همینظور نوع انتشارشون در شرایط مختلف آشنا شدیم.در این قسمت میخواهیم از ویژگی ها ادپتر استفاده کنیم تا بر اساس سناریو کارمون دیتارو منتشر کنیم .
من سه حالت رو برای شما آماده کردم درموارد پایین api , db به ترتیب نمونه ای از اینترفیس دیتابیس و ای پی آی هستند . متد های نوشته شده متد های repository هستند.
حالت اول : قصدم اینه یوزر رو از دیتا بیس بخوانم و اگر وجود نداشت از آی پی آی اونرو بگیرم و هم ذخیره کنم هم به یوآی بفرستم :
قبلا خواندیم در صورتی که یوزر در دیتابیس نباشه سینگل متد ارور رو فراخونی میکنه و ما از همین مورد استفاده کردم که ای ای پی آی فراخوانی کنیم البته در این مورد دیتا فقط یکبار از دیتا بیس خوانده میشود.
حالت دوم : قصد ما اینه اگه اینترنت وصل بود همیشه به روز ترینن دیتا ها روی یو آی داشته باشیم .
در مرود این حالت دیتابیس ماننده یک لایه کچ عمل میکنه و همیشه به روزترین دیتارو میتونیم در یو آی داشته باشیم.
حالت سوم: (ی جورای قرار حالت اول و دوم میخواییم ادغام کنیم ) در صورتی که بخواییم که درخواست ما ری اکتیو باشه(در صورت اپدیت یوزر یوزر جدید منتشر بشه ) و در صورت نبود (فقط در صورت نبودش) از ای پی آی اونرو بگیریم ولی همیشه به روز ترین دیتارو داشته باشیم(از ای پی آی نیست پس از کجا بروز باشه ؟) . زمانی این مورد بدر میخوره که قرار دیتارو از جایی غیر ای پی اي هم اپدیتت کنیم( از سرویس یا یک فرگمنت دیگه ) و بخواییم تغییرات هم روی یو آی مشاهده کنیم کاربردش هم مثه سبد خرید یا بدج ایکن.
در مرود استفاده از `Flowable<T>` و `FlowableEmpity();` به جای `Flowable <List<T>>` و چک کردن لیست سایز باید بگم تو این حالت فلوبل تا اونجایی اطلاع دارم در صورت نبود یوزر اصلا متد نکست فراخوانی نمیکنه که بخواد `FlowableEmpity();` رو منتشر کنه ( البته چک نکردم اگه شما کردین کامنت بزارین) پس من این حالت انخاب کردم البته به توصیه (سازنده لایبراری ) .
نکته : شما میتوانید api و db رو به repository تزریق کنید به طور مثال با dagger2.
و خود repository هم به دامین لایر تزریق کنیم . ( قدرت بالای دگر در تزریق ماژول ها تو در تو )
ممنون از توجه شما منتظر نظراتتون و پیشنهاداتون هستم .