تابستان امسال مايكروسافت يكي از كامپوننت هاي كليدي NET Reactive (Rx) Framework. را منتشر كرد كه به توسعه دهندگان اجازه مي دهد عبارت هاي LINQ را بر روي رخدادها مورد استفاده قرار دهند. كامپوننت هاي Rx Framework در آخرين انتشار Toolkit سيلورلايت گنجانده شده اند. نسخه كامل اين فريم ورك قرار است به عنوان بخشي از ويژوال استوديو 2010 و دانت نت فريم ورك 4.0 ارائه شود. بر اساس اظهار Erik Meijer مدير تيم Data Programmability Languages فريم ورك Rx شامل دو واسط اصلي IObserver/IObservable بوده كه ساختمان داده هايي (Observable Collections) با توابع توسعه يافته (Extenstion Methods) ارائه مي دهند. اين توابع عملگرهاي استاندارد LINQ را پياده سازي مي كنند. Observable collection ها بر مبناي الگوي subject/observer پياده سازي شده اند و براي برنامه نويسي مبتني بر رخداد و نيز برنامه نويسي غيرهمزمان (asynchronous) مناسب مي باشند. اگر تاكنون با LINQ to Objects كار كرده باشيد، در جريان هستيد كه اين مكانيزم از دو واسط IEnumerable و IEnumerator به منظور پيمايش مجموعه ها استفاده مي كند. مجموعه يا به عبارتي كلكسيوني كه قصد دارد قابليت پيمايش داشته باشد، IEnumerable را پياده سازي مي كند. مجموعه توسط ساختاري كه از IEnumerator ارث بري كرده است، پيمايش مي شود. تابع MoveNext ساختار IEnumerator عنصر بعدي مجموعه را در اختيار قرار مي دهد و خصيصه Current آن نيز دسترسي به عنصر فعلي را ميسر مي سازد. ايراد اين مكانيزم اين است كه از آن نمي توان در عمليات غيرهم زمان استفاده كرد. به همين منظور تيم طراح Rx Framework دو واسط جديد به نام هاي IObserver و IObservable ارائه كرده است. براي اينكه با طرز كار اين دو واسط جديد آشنا شويد، مكانيزم قبلي را در نظر بگيريد. IObservable مانند IEnumerable براي پيمايش مجموعه به صورت غيرهمزمان به كار مي رود. به منظور اضافه كردن داده جديد به مجموعه بايد يك IObserver تعريف كرده و آن را به IObservable بدهيد تا IObservable با استفاده از توابع IObserver آن را به داخل مجموعه push كند. بنابراين مجموعه IObservable ساختاري پشته (Stack) مانند دارد و پيمايش آن به صورت معكوس IEnumerable انجام مي شود. قابل ذكر است فراخواني تابع OnUpdate توسط IObservable معادل استفاده از كلمه كليدي yeild توسط IEnumerable و فراخواني تابع OnCompleted معادل استفاده از كلمه break توسط IEnumerable مي باشد. شايد اين سوال به ذهن شما خطور كند كه اين ساختار كجا قابل استفاده مي باشد؟ يكي از مناسب ترين سناريوهاي استفاده از اين مكانيزم، هندل كردن رخدادهاي واسط كاربر مي باشد. تصور كنيد كه يك IObserver رخدادهاي ماوس را به يك مجموعه اضافه كند و سپس بتوان با استفاده از LINQ اين رخدادها را پيمايش و پردازش كرد. نمونه كدي از آنچه در اين خبر بيان كرديم در اين وبلاگ ارائه شده است. متن تكميلي خبر را اينجا مطالعه كنيد. منبع خبر : PersiaDevelopers ( هر گونه استفاده از اخبار اختصاصي PersiaDevelopers منوط به درج منبع خبر بلامانع مي باشد.)