Reactive Programming with RxJava
برنامه نویسی Reactive، یک اصطلاح عمومی برنامه نویسی است که تمرکزش بر روی واکنش دادن به تغییرات است مثل مقادیر دادهها یا رویدادها که معمولا این کار را میتوان به صورت دستوری انجام داد. Callback رویکردی برای برنامه نویسی reactive است که دستوری انجام میشود. یک صفحه اکسل مثالی عالی از برنامه نویسی reactive است: سلول هایی که وابسته به سلولهای دیگر هستند به صورت خودکار واکنش (react) نشان میدهند وقتی که مقادیر آن سلولها تغییر میکنند.
در 28 اکتبر سال 2005، Ray Ozzie معمار ارشد مایکروسافت که اخیرا منصوب شده بود، یادداشتی غم انگیز برای کارکنان خود با عنوان اختلال سرویسهای اینترنتی ایمیل کرد. در این یادداشت Ray Oziie نمایی کلی از این داد که اساسا جهان امروزه چگونه به نظر میرسد جایی که سازمانها مثل مایکروسافت، گوگل، فیسبوک، آمازون و نتفلیکس از وب به عنوان کانال اصلی برای ارائه سرویس هایشان استفاده میکنند.
از دید یک توسعه دهنده، Ozzie بیانیه ای قابل توجه ای برای مدیر اجرایی یک شرکت بزرگ داد:
پیچیدگی کشنده است. دهان توسعه دهندگان را سرویس میکند، برنامه ریزی، بیلد و تست محصولات را مشکل میکند، چالشهای امنیتی به بار میآورد و سبب ناامیدی کاربر نهایی و مدیر میشود.
اول از همه این را در نظر داشته باشید که در سال 2005، سازمانهای بزرگ فناوری عمیقا عاشق فناوریهای پیچیده ای مثل SOAP، WS-* و XML بودند. زمانی بود که هنوز لغت میکرو سرویس اختراع نشده بود و تکنولوژی ساده ای وجود نداشت تا به توسعه دهندگان کمک کند تا پیچیدگی ترکیب آسنکرون سرویسهای پیچیده از قسمتهای کوچکتر را مدیریت کنند و آنها را از شر سر و کله زدن با نگرانی هایی مثل شکست، لتنسی، امنیت و کارآمدی راحت کند.
برای تیم برنامه نویسی ابری من در مایکروسافت، یادداشت Ozzie، بیدارباشی بود تا بر روی ابداع یک مدل برنامه نویسی ساده برای ساخت معماریهای سرویس اینترنتی آسنکرون با مقیاس بزرگ و data-intensive تمرکز کنیم. پس از شروعهای غلط زیاد، نهایتا به ما این را آموخت که با دوگانه کردن اینترفیس Iterable/Iterator برای کالکشنهای سنکرون، میتوان به یک جفت اینترفیس برای ارائه جریانهای رویداد آسنکرون، با همهی عملگرهای ترتیبی آشنا مثل map، filter، scan، zip، groupBy و غیره رسید برای تبدیل و ترکیب جریان دادههای آسنکرون، و بدین ترتیب Rx جایی در تابستان 2007 متولد شد. در طول پروسه پیاده سازی ما فهمیدیم که باید همزمانی و زمان را مدیریت کنیم و برای آن ما ایدهی اجرا گرهای جاوا با زمان مجازی و برنامه ریزی مجدد اشتراکی را گسترش دادیم.
پس از دو سال سخت، hackathon جایی بود که انتخابهای طراحی زیادی را کشف کردیم، ما ابتدا Rx.NET را در 18 نوامبر سال 2009 بیرون دادیم. پس از آن زود ما Rx را به Microsoft.Phone.Reactive برای windows phone 7 پورت کردیم و به این منجر شد که Rx در زبانهای متعدد دیگری مثل جاوا اسکریپت، ++C و به صورت نسخههای آزمایشی در روبی و Objective-C پیاده سازی شود.
همان طور که Rx در صنعت محبوبتر میشد، ما Microsoft Open Tech را متقاعد کردیم تا Rx .NET را در پاییز 2012 متن باز کند. پس از آن من مایکروسافت را ترک کردم تا 100 درصد از زمانم را روی Rx بگذارم تا آن را تبدیل به API ای cross-language و cross-platform برای پردازش دادهای استریم بلادرنگ آسنکرون کنم.
در کتاب برنامه نویسی Reactive با RxJava – ساخت برنامههای آسنکرون رویداد محور، با این که جزئیات RxJava مقداری متفاوت از پیاده سازیهای دیگر Rx است، اما هنوز هم مخصوص همهی شما توسعه دهندگانی ساخته شده است که احتیاج به زنده ماندن در دنیای جدیدی از پردازش دادههای توزیع شده بلادرنگ دارند و میخواهند بر روی پیچیدگیهای مورد احتیاج تمرکز کنند بدون اینکه درگیر پیچیدگیهای تصادفی شوند که زندگی را به کامشان تلخ میکنند.
In today’s app-driven era, when programs are asynchronous and responsiveness is so vital, reactive programming can help you write code that’s more reliable, easier to scale, and better-performing. With this practical book, Java developers will first learn how to view problems in the reactive way, and then build programs that leverage the best features of this exciting new programming paradigm.
Authors Tomasz Nurkiewicz and Ben Christensen include concrete examples that use the RxJava library to solve real-world performance issues on Android devices as well as the server. You’ll learn how RxJava leverages parallelism and concurrency to help you solve today’s problems. This book also provides a preview of the upcoming 2.0 release.
Write programs that react to multiple asynchronous sources of input without descending into "callback hell"
Get to that aha! moment when you understand how to solve problems in the reactive way
Cope with Observables that produce data too quickly to be consumed
Explore strategies to debug and to test programs written in the reactive style
Efficiently exploit parallelism and concurrency in your programs
Learn about the transition to RxJava version 2
Table of Contents
Chapter 1. Reactive Programming with RxJava
Chapter 2. Reactive Extensions
Chapter 3. Operators and Transformations
Chapter 4. Applying Reactive Programming to Existing Applications
Chapter 5. Reactive from Top to Bottom
Chapter 6. Flow Control and Backpressure
Chapter 7. Testing and Troubleshooting
Chapter 8. Case Studies
Chapter 9. Future Directions
Appendix A. More HTTP Server Examples
Appendix B. A Decision Tree of Observable Operators