در پست برنامه نویسی قبلی راجب معمار تمیز صحبت کردیم در این پست میخواهیم تمرکزمون رو روی قسمت ادغام دامین لایر( دریافت اطلاعات ) بگزاریم به عبارتی دیگر میخواهیم یک مخزن برای ورود و خروج اطلاعات از مکان مختلف به منظور مدیریت آن ها ایجاد کنیم.
کتاب خانه room یک لایه انتزاعی است که به ما کمک میکنه دسترسی راحت تری به SQLite داشته باشیم.
کتاب خانه retrofit کتاب خانه ای سریع سبک و انعطاف پذیر برای ارتباط http با api هست.
پیش فرض : ما در نظر میگیریم که شما دو کتابخانه بالا و ادپتر های rx مخصوص این دو کتاب خانه و کتاب خانه rx اضافه کرده باشین. و کار با آن ها رو بلد باشین . برای اشنایی با روش استفاده از دو کتاب خانه بالا به لینک های داده شده مراجعه کنید و اگر مبهم بود حتما در کامنت سوال کنید تا جایی بلد باشم راهنمایی میکنم پ ن : یک آموزش خوب از دوستمون hamed momeni در مورد retrofit در ویرگول دیدم میتونید مطالعه کنید.
ادپتر 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
دیتایی منتشر نمیشه )
در ادامه قسمت دوم من از دور اپراتور اول استفاده میکنم و بیشتر به کار میاد به نظر خودم .