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

در پست برنامه نویسی قبلی راجب معمار تمیز صحبت کردیم در این پست میخواهیم تمرکزمون رو روی قسمت ادغام دامین لایر( دریافت اطلاعات ) بگزاریم به عبارتی دیگر میخواهیم یک مخزن برای ورود و خروج اطلاعات از مکان مختلف به منظور مدیریت آن ها ایجاد کنیم.

repository
repository


کتاب خانه room یک لایه انتزاعی است که به ما کمک میکنه دسترسی راحت تری به SQLite داشته باشیم.

کتاب خانه retrofit کتاب خانه ای سریع سبک و انعطاف پذیر برای ارتباط http با api هست.

پیش فرض : ما در نظر میگیریم که شما دو کتابخانه بالا و ادپتر های rx مخصوص این دو کتاب خانه و کتاب خانه rx اضافه کرده باشین. و کار با آن ها رو بلد باشین . برای اشنایی با روش استفاده از دو کتاب خانه بالا به لینک های داده شده مراجعه کنید و اگر مبهم بود حتما در کامنت سوال کنید تا جایی بلد باشم راهنمایی میکنم پ ن : یک آموزش خوب از دوستمون hamed momeni در مورد retrofit در ویرگول دیدم میتونید مطالعه کنید.



آشنایی با ادپتر rx مخصوص room

ادپتر rx مخصوص روم از سه اپراتور به شرح زیر پیروی میکند:

در اینجا بحث ما خواند یک یوزر از دیتابیس هست :

@Query(“SELECT * FROM Users WHERE id = :userId”)
Single<User> getUserById(String userId);

اپراتور Single : زمانی که هیچ یوزری در دیتا بیس وجود نداشته باشد اپراتور یک ارور انتشار میدهد که میتوان این مورد رو با onError(EmptyResultSetExeption.calss) هندل کنیم.

در صورتی که یوزر در دیتابیس وجود داشته باشد متد onSuccess فراخوان میشود و یوزر منتشر میشود و بلا فاصله متد onComplete . در نتیجه سینگل تا زمانی onComplete فرواخوان نشده یوزر رو منتشر مکینه و بعد از فراخوان درصورت اپدیت یوزر اتفاقی نمی افتد .

@Query(“SELECT * FROM Users WHERE id = :userId”)
Flowable<User> getUserById(String userId);

اپراتور flowable : در صورتی که یوزر در دیتابیس وجود نداشته باشد چیزی انتشار نمی دهد و در صورت وجود متد onNext فراخوان میشود . در این مورد متد onComplete هرگز فراخونی نمیشود و در هنگام اپدیت یوزر، یوزر اپدیت شده منتشر میشود. (به وسیله این اپراتور میتوان آخرین بروز رسانی دیتا رو روی یو آی به صورت واکنش گرا نمایش داد. )‌

اپراتور maybe : در صورتی که یوزر دی دیتا بیس وجود نداشته باشه onComplete فراخوان میشه و در صورت وجود یوز onSuccess فرواخون میشه و یوزر منتشر میشود و بلافاصله onComplete . (بنابر این در این مورد هم بعد از onComplete دیتایی منتشر نمیشه )

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