برنامهنویسی Reactive با RxJava در اندروید
اگه با بحث الگوهای طراحی در مهندسی نرم افزار آشنایی داشته باشید میدونید که یه الگویی به اسم Observer داریم. پایه فهم RxJava یا همون برنامه نویسی reactive در اندروید فهمیدن الگوی طراحی Observer هست. پس از خواندن این مقاله شما میتونید جواب سوال های زیر رو بدونید.
- مفهوم الگوی طراحی Observer چیست؟
- برنامه نویسی Reactive در اندروید چیست و چرا باید ازش استفاده کنیم؟
مفهوم الگوی طراحی Observer
برای درک مفهوم الگوی طراحی observer یک مثال میزنم. فرض کنید شما از مطالب یک وب سایت خیلی خوشتون میاد و دوست دارید هر وقت مطلب جدیدی توی سایت دلخواهتون منتشر میشه سریع بخونیدش. یک راه این هست که حواستون باشه هر چند وقت یکبار به سایت دلخواهتون سر بزنید تا مطالبش رو از دست ندید ولی راه خوبش این هست که شما توی خبرنامه سایت subscribe کنید، مثلا ایمیلتون رو در خبرنامه وارد کنید تا هر وقت مطلب جدیدی اضافه شد براتون ایمیل فرستاده بشه و خبر دار بشید. حالت دوم در واقع همون الگوی طراحی Observer است :-).
به سایت مبدا Observable یا Publisher میگیم و به شما که subscribe کردید تا هر وقت مطلب جدید اومد مطلع بشید Observer یا Subscriber میگیم. حالا در دنیای برنامه نویسی Observable و Observer هر دو کلاسهایی هستند که ازشون Object ساخته میشه. یک کلاس Observable دیتا رو منتشر (Publish) میکنه و یک کلاس Observer دیتای منتشر شده توسط کلاس Observable رو میگیره و یه کاری باهاشون انجام میده. فقط این نکته مهم رو حواستون باشه که کلاس Observer تا وقتی برای دریافت دیتا از کلاس Observable ساباسکرایب(Subscribe) نکرده باشه دیتایی رو دریافت نمیکنه.
برنامه نویسی Reactive در اندروید چیست؟
وقتی گفته میشود که در اندروید از برنامه نویسی Reactive استفاده کردیم منظور این هست که برای کارهای مختلف Observable ها و Observer ها رو به کار بردیم. مثلا فرض کنید قراره یک سری دیتا رو در RecyclerView نمایش بدیم برای اینکار اگه بخوایم از برنامه نویسی Reactive استفاده کنیم میتونیم یک Observable داشته باشیم که دیتای مورد نظر ما رو Publish کنه و یک Observer داشته باشیم که دیتای منتشر شده رو بگیره و در RecyclerView نمایش بده. همانطور که قبلا اشاره کردم Observer با دیتایی که میگیره یک کاری انجام میده مثلا توی این مثال دیتا رو در RecyclerView نمایش میده، ممکنه در جای دیگه دیتایی رو که گرفته توی دیتابیس ذخیره کنه و یا هر کار دیگه ای رو با دیتایی که میگیره انجام بده.
یک Observable میتواند هر تعداد Observer یا Subscriber داشته باشد. هر وقت Observable یک آیتم دیتای جدید رو منتشر کنه متد OnNext هر کدام از Subscriber ها فراخوانی میشود. هر وقت Observable کار انتشار کل دیتای مورد نظرش رو به طور موفق انجام بدهد متد OnComplete هر کدام از Subscriber ها فراخوانی میشود. هر وقت Observable موقع انتشار دیتای خود با مشکل مواجه شود متد هر کدام از Subscriber ها فراخوانی میشود.
چرا از برنامهنویسی Reactive در اندروید استفاده میکنیم؟
استفاده از برنامه نویسی Reactive در اندروید مزایای زیادی داره، باعث میشه برای کارهای پیچیده کد کمتری بنویسید و در نتیجه خوانایی کدهاتون افزایش پیدا میکنه و همین امر باعث میشه که دیباگ برنامه و پیدا کردن خطا راحت تر انجام بشه. علاوه بر این موارد، موقعی که در برنامه هاتون از Multithreading استفاده میکنید(همه اپ ها جز موقعی که میخواید چند تا کد تستی بنویسید از Multithreading استفاده میکنن) کارتون خیلی راحت میشه. برای مثال شما میتوانید بگید که Observable دیتای خود را در ترد بک گراند تولید کنه و Observer در ترد main دیتا را دریافت کرده و از آنها استفاده کند.
برای درک مفاهیم کلیدی هنگام استفاده از کتابخانه RxJava مقاله آموزش مقدماتی RxJava رو میتونید مطالعه کنید و مقاله جایگزین کردن AsyncTask با RxJava رو هم برای به کاربردن RxJava در Multitheading پیشنهاد میکنم. فیلم آموزشی RxJava هم یه مثال عملی برای به کاربردن RxJava و Retrofit است. در این فیلم آموزشی برای فراخوانی API سرور از Retrofit استفاده شده و برای گرفتن دیتا و نمایش آن در RecyclerView از RxJava استفاده شده. کد در ابتدا با معماری MVC نوشته میشه و بعد مرحله به مرحله تبدیل به معماری MVP میشه.