: تحولی بزرگ در کار با داده ( بخش اول )
نرم افزار یکی از ارکان مهم فناوری اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نيز همواره حائز اهمیت بوده است ، ولی در ساليان اخير به دليل گسترش اينترنت و ظهور نسل جديدی از برنامه های کامپيوتری موسوم به برنامه های وب ، نگاه به نرم افزار و انتظار از آن در جهت تامين طيف گسترده ای از خواسته ها تغيير و رشد چشمگيری يافته است . به همين دليل است که در دنيای نرم افزار هر روز تحولات مهمی اتفاق می افتد و فناوری های جديدی قدم در اين عرصه می گذارند .
ظهور فناوری LINQ ( برگرفته شده از Language-INtegrated Query ) تلاشی است در اين راستا که با هدف تحول در نحوه دستیابی به منابع داده ( صرفنظر از نوع منبع داده ) ، مطرح شده است .
پس از مطرح شدن هر گونه فناوری در عرصه نرم افزار ، طراحان و پياده کنندگان با سه پرسش اساسی مواجه می گردند : این فناوری چيست ؟ چه کار می کند ؟ و چرا ما به آن نیاز داريم ؟ در این مقاله و سایر مقالاتی که در ادامه بر روی سایت منتشر خواهد شد ، سعی خواهیم کرد به سه پرسش فوق در ارتباط با فناوری LINQ پاسخ دهيم .
مقدمه
کد و داده دو عنصر اساسی در نرم افزار می باشند که هر یک دارای جایگاه تعريف شده مختص به خود است . یکی از فعالیت های مهم در زمان پياده سازی نرم افزار ، نوشتن کد مورد نیاز جهت دستيابی به داده است . برای نوشتن کد ، پياده کنندگان می توانند از زبان های برنامه نویسی مختلفی استفاده کنند . انتخاب زبان برنامه نویسی به عوامل متعددی نظیر نوع رفتار برنامه ، پيش زمينه و دانش پياده کنندگان ، مهارت های تیم پياده کننده ، نوع سیستم عامل و سياست های سازمان بستگی دارد . صرفنظر از این که پياده کنندگان چه زبانی را برای نوشتن کد انتخاب می نمایند ، در زمان پياده سازی نرم افزار به دفعات مجبور خواهیم بود که با داده سرو کار داشته باشیم . داده می تواند بر روی ديسک ، جداولی در بانک اطلاعاتی و يا اسناد XML ذخيره شده باشد . در برخی موارد لازم است که با تمامی نوع های اشاره شده در یک برنامه سرو کار داشته باشیم . فراموش نکنيم که مديريت داده برای هر پروژه نرم افزاری یک باید است .
پياده کنندگان نرم افزار در زمان نوشتن کد و تولید امکانات مورد نياز در هر يک از لایه های متفاوت ( با توجه به نوع معماری نرم افزار ) ، همواره این پرسش را با خود مطرح می نمایند که محيط پياده سازی و یا فريمورک هائی نظیر دات نت چه امکاناتی را در اختيار آنها خصوصا" در زمان کار با داده قرار می دهند . به عبارت دیگر ، يک سيستم عامل چگونه می تواند نياز پياده کنندگان نرم افزار را پوشش دهد و چه امکانات و پتانسيل هائی را در اختيار علاقه مندان به طراحی و پياده سازی نرم افزار قرار می دهد .
دات نت به عنوان یکی از فريمورک های پياده سازی نرم افزار در سالیان اخير ، امکانات متعددی را جهت کار با داده در اختيار پياده کنندگان نرم افزار قرار می دهد . LINQ ، تلاشی است جهت يکپارچگی عميق تر و بیش تر بین زبان های برنامه نویسی و داده . در واقع LINQ مشتمل بر مجموعه ای از عملگرهای query استاندارد است که معماری لازم جهت حرکت ، فيلترينگ و اجرای عملیات بر روی تقريبا" هر نوع منبع داده نظیر XML ، بانک های اطلاعاتی رابطه ای و اشياء درون حافظه را فراهم می نماید .
قبل از هر چيز اجازه دهيد ببينيم LINQ چيست ؟
LINQ چيست ؟
با این که فناوری LINQ در پائيز سال 2005 مطرح گردید ولی فرآیند پیاده سازی آن از سال 2003 آغاز شده بود . هدف از ابداع فناوری فوق، ارائه تسهيلات لازم برای پياده کنندگان جهت کار با داده در بانک های اطلاعاتی SQL و XML عنوان شده است. در واقع ، وجود یک حلقه گمشده بین داده رابطه ای ( بانک های اطلاعاتی ) ، اسناد XML با زبان های برنامه نویسی ، ضرورت ابداع فناوری فوق را توجيه کرده بود . پياده کنندگان مجبور بودند برای کار با هر يک از منابع داده ، از روش های مختلفی استفاده نمایند . LINQ را می توان به منزله حلقه ای گمشده بین دنیای داده و زبان های برنامه نویسی همه منظوره تصور کرد . با استفاده از LINQ امکان دستیابی به داده صرفنظر از نوع داده ، با روشی مشابه و یکسان فراهم می گردد .
پیاده کنندگان نرم افزار در زمان نوشتن برنامه های خود معمولا" از دو زبان مختلف جهت رسیدن به یک هدف مشترک استفاده می نمایند . ما برای نوشتن کدها از یک زبان برنامه نویسی نظیر VB.NET و يا #C و برای گفتگو با سیستم بانک اطلاعاتی از یک زبان دیگر نظیر SQL استفاده می کنيم .
|
برای سفارش شام خود از یک زبان و برای سفارش چای از زبان دیگر ! |
این موضوع می تواند چالش های متعددی را برای پياده کنندگان نرم افزار به دنبال داشته باشد :
-
در مواردی که فريمورک دات نت را به عنوان پلت فرم انتخاب کرده باشیم ، دات نت قادر به درک کدهای SQL نخواهد بود.
-
در مواردی که از زبان های برنامه نویسی حمايت شده در دات نت جهت نوشتن کد در محيط ويژوال استوديو استفاده می کنيم ، همواره یک ابزار قدرتمند در کنار ما است تا در صورت اشتباه در گرامر دستورات توصیه های لازم را ارائه نماید ( IntelliSense ) .از ويژگی فوق نمی توان در ارتباط با SQL استفاده کرد .
-
امکان بررسی نوع ها در زمان ترجمه وجود ندارد . این بدان معنی است که پياده کنندگان تا زمانی که برنامه اجراء نگردد ، نمی توانند مشکلات احتمالی را مشاهده و قبل از زمان اجراء با آنها برخورد نمایند .
-
شرکت مايکروسافت امکانات متعددی را در فريمورک دات نت جهت کار با اسناد XML ارائه کرده است . ارائه System.Xml ، System.Xml.XPath و System.Xml.Schema نمونه هائی در این زمینه می باشند . پياده کنندگان نرم افزار در زمان کار با اسناد XML مجبور بودند که از فناوری های متعددی نظیر DOM ( برگرفته شده از Document Object Mode ) و XQuery استفاده نمایند . همين موضوع باعث شده بود که کار با اسناد XML نظیر خواندن و یا نوشتن داده در آنها برای بسیاری از پياده کنندگان مشکل باشد.
شرکت مايکروسافت برای حل مشکلات فوق ، بررسی دو راهکار را در دستور کار خود قرار داد :
-
ایجاد پتانسیل های مورد نیاز مختص XML و یا داده رابطه ای در هر یک از زبان های برنامه نویسی و زمان اجراء . راهکار فوق نه تنها مشکل اصلی را حل نمی کرد بلکه در مواردی مشکلات را خصوصا" در زمینه نگهداری افزایش می داد .
-
اضافه کردن قابلیت های همه منظوره نوشتن query در فریمورک دات نت . به عبارت دیگر یک فریمورک همه منظوره با قابلیت نوشتن query درون فريمورک دات نت که زبان های VB.NET و #C بتوانند به سادگی از مز ایای آن استفاده نمایند .
خوشبختانه ، شرکت مایکروسافت گزينه دوم را انتخاب نمود . ایجاد یک زیرساخت جهت نوشتن query در بين اشياء ، اسناد XML ، داده رابطه ای و ...
هم اینک پیاده کنندگان می توانند از مزايای یک الگوی تعريفی در هر یک از زبان های دات نت جهت کار با داده استفاده نمایند . ارائه مجموعه اپراتورهای استاندارد جهت نوشتن query یکی از دستاوردهای مهم LINQ محسوب می گردد . بدین ترتیب ، پياده کنندگان می توانند با بکارگیری یک مجموعه يکسان از اپراتورهای نوشتن query در هر یک از زبان های برنامه نویسی حمایت شده در دات نت ، از داده ذخیره شده در منابع داده مختلف صرفنظر از نوع منبع داده استفاده نمایند . همچنين ، امکان استفاده از پتانسیل هائی نظیر IntelliSense و بررسی نوع ها در زمان ترجمه نیز وجود خواهد داشت .
شکل 1 نحوه عملکرد LINQ را نشان می دهد .

شکل 1 : عملکرد فناوری LINQ
مثال
برای آشنایی اولیه با قابلیت های LINQ ، بد نيست بدون این که بخواهیم وارد جزئيات شویم یک مثال کاربردی را با یکدیگر دنبال نمائیم .
در اين مثال با استفاده از LINQ و با يک روش مشابه به منابع داده مختلفی متصل شده و پس از بازیابی داده ، آنها را در يک ListBox جداگانه نمایش می دهيم .
منابع داده عبارتند از :
- فولدرهای موجود در یک درایو
- پردازه های در حال اجراء در ويندور
- يک بانک اطلاعاتی رابطه ای SQL
- عناصر موجود در يک آرایه
- يک فایل XML
- یک فایل متن
منبع