برنامه نویسی واکنش گرا (Reactive)

دسته بندی: مباحث عمومی

برنامه نویسی واکنش گرا

آنچه در این صفحه می خوانید:

برنامه نویسی واکنش گرا (Reactive) چیست؟

در محاسبات، برنامه نویسی واکنش گرا الگوی برنامه نویسی اعلانی است که مربوط به جریان داده ها و انتشار تغییر است. با استفاده از این الگوریتم، می توانید جریان داده های استاتیک (به عنوان مثال، آرایه ها) یا پویا (به عنوان مثال، فرستنده رویداد) را به راحتی بیان کنید و همچنین وابستگی استنباطی در مدل اجرای همراه وجود دارد که باعث تسهیل انتشار خودکار تغییر گردش داده ها می شود، ارتباط برقرار کنید. مثال دیگر زبان توصیف سخت افزاری مانند Verilog است، که در آن برنامه نویسی واکنش گرا امکان تغییر مدل ها را از طریق انتشار مدارها فراهم می کند. برنامه نویسی واکنش گرا به عنوان راهی برای ساده سازی ایجاد رابط های کاربر تعاملی و انیمیشن سیستم در real-time پیشنهاد شده است. در معماری مدل MVC، برنامه نویسی واکنش گرا می تواند تغییراتی را در مدل اساسی ایجاد کند که به طور خودکار در نمای مرتبط منعکس می شود.

برنامه نویسی واکنش گرا پارادایم برنامه نویسی غیر همزمان است که در اطراف stream یا جریان های داده ساخته شده است. رویدادها، درخواست های سرور، پیام ها و حتی مقادیر همگی از طریق جریان ها منتقل می شوند. برنامه ریزی واکنش گرا سبکی از micro-architecture است که شامل مسیریابی هوشمند و مصرف رویدادها است. واکنش گرایی به این معنا است که شما می توانید با less بیشتر کار کنید، به ویژه می توانید فرآیند بارگذاری بیشتری با threads کمتری انجام دهید.

ویژگی های برنامه نویسی واکنش گرا (Reactive)

استفاده از برنامه نویسی واکنش گرا، سیستم واکنش گرا ایجاد نمی کند. سیستم های واکنش گرا همانطور که در بنیاد مانیفست واکنش نشان داده شده است، سبک معماری برای ساخت سیستم های توزیع پذیر پاسخگو هستند. سیستم های واکنش گرا را می توان دید که سیستم های توزیع شده به درستی انجام می شوند. سیستم واکنش گرا با چهار ویژگی مشخص می شود:

  • واکنش گرا (Responsive): سیستم واکنش پذیر باید در زمان معقول رسیدگی به درخواست ها را انجام دهد.
  • انعطاف پذیر: سیستم واکنش گرا باید در مواجهه با خرابی، پاسخگو بماند، بنابراین باید برای خرابی ها برنامه ریزی شود و به طور مناسب با آن ها برخورد کند.
  • ارتجاعی: سیستم واکنش پذیر باید تحت بارهای مختلف پاسخگو باشد. در نتیجه باید مقیاس بالا و پایین باشد و بتواند بار را با حداقل منابع تحمل کند.
  • پیام محور: مولفه های سیستم واکنش پذیر با استفاده از ارسال پیام ناهمزمان تعامل دارند.
  • تاب آوری: سیستم ها باید در صورت عدم موفقیت بعضی از اجزا پاسخگو باشند.

با وجود سادگی این اصول اساسی سیستم های واکنش گرا، ساختن نوع از آن ها مشکل است. به طور معمول، هر گره باید مدل توسعه غیر مسدود کننده ناهمزمان، مدل دستیابی هم زمان به تسک را در بر بگیرد و از I/O بدون انسداد استفاده کند. اگر در ابتدا به این نکات فکر نکنید، به سرعت شبیه به بشقاب اسپاگتی خواهد شد. با استفاده از آن، کد شما قابل خواندن و قابل درک خواهد ماند. با این وجود، استفاده از برنامه نویسی واکنش گرا سیستم شما را به  سیستم واکنش گرا تبدیل نمی کند. سیستم های واکنش پذیر سطح بعدی هستند.

مزایای برنامه نویسی واکنش گرا (Reactive)

چندین روش محبوب در ایجاد زبان برنامه نویسی واکنش گرا به کار رفته است. مشخصات زبان های اختصاصی که مخصوص محدودیت های مختلف دامنه هستند. این محدودیت ها معمولاً در real-time، جاسازی یا سخت افزار مشخص می شوند. رویکرد دیگر شامل مشخصات زبان های عمومی است که شامل پشتیبانی از واکنش پذیری است. در تعریف دیگر رویکردهای دیگر بیان شده است و استفاده از کتابخانه های برنامه نویسی یا زبان های اختصاصی دامنه، که واکنش پذیری را در کنار یا بالای زبان برنامه نویسی امکان پذیر می سازند. مشخصات و استفاده از این رویکردهای مختلف منجر به تبادل توانایی در زبان می شود. به طور کلی، هرچه زبان محدودتر باشد، کامپایلرها و ابزارهای تجزیه و تحلیل آن قادر به آگاه ساختن توسعه دهندگان هستند (به عنوان مثال، در انجام تجزیه و تحلیل برای اینکه آیا برنامه ها می توانند در real-time اجرا شوند). مبادلات عملکردی در ویژگی ممکن است به وخیم تر بودن کاربرد عمومی زبان منجر شود. در زبان های برنامه نویسی جاوا، جاوااسکریپت، پایتون، اسکالا، GO و سی شارپ از برنامه نویسی واکنش گرا بهره خواهید برد.

از دیگر مزایای برنامه نویسی واکنش گرا می توان به موارد زیر اشاره کرد:

  • اجتناب از "callback hell"
  • دارای مکانیزم استاندارد برای ریکاوری خطا
  • دارای روش بسیار دقیق و روشنی برای ساخت عملیات غیرهمزمان
  • مدیریت راحت UI interactions/events
  • API هایی را برای دسترسی به پایگاه داده، UI، محاسبات، دسترسی به شبکه و همه چیزهایی که به آن نیاز دارید ارائه می دهد.
  • هماهنگ سازی کار به طور موازی و اجرای برخی از کد زمانی که همه چیز انجام شده است.
  • راه فوق العاده آسان برای UI thread
  • ایجاد هم زمانی
  • اپراتورها مقدار زیادی از کد تست شده را ارائه می دهند که می تواند به شما در حل وظایف کمک کند.

مثال برنامه نویسی واکنش گرا (Reactive)

اپراتور پایه فقط Observable تولید می کند که نمونه عمومی را قبل از اتمام، رشته "Hello" تولید می کند. هنگامی که می خواهیم اطلاعاتی را از ناظر دریافت کنیم، رابط Observable را پیاده سازی می کنیم و سپس در مورد Observer مورد نظر مشترک می شویم:

Observable<String> observable = Observable.just("Hello");
observable.subscribe(s -> result = s);
assertTrue(result.equals("Hello"));

آیا این نوشته را دوست داشتید؟