نرم افزار يکي از ارکان مهم فناوري اطلاعات و ارتباطات در عصر حاضر است . گرچه نرم افزار در گذشته نيز همواره حائز اهميت بوده است ، ولي در ساليان اخير به دليل گسترش اينترنت و ظهور نسل جديدي از برنامه هاي کامپيوتري موسوم به برنامه هاي وب ، نگاه به نرم افزار و انتظار از آن در جهت تامين طيف گسترده اي از خواسته ها تغيير و رشد چشمگيري يافته است . به همين دليل است که در دنياي نرم افزار هر روز تحولات مهمي اتفاق مي افتد و فناوري هاي جديدي قدم در اين عرصه مي گذارند . ظهور فناوري 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 جداگانه نمايش مي دهيم . منابع داده عبارتند از :
کلاس ايجاد شده بر اساس داده موجود در بانک اطلاعاتي Contact براي جدول Persons LINQ to SQL Class
)> _ Public Class Person
بازيابي فولدرهاي موجود در درايو C
شکل زير خروجي برنامه فوق را نشان مي دهد .
شکل 2 : دستيابي به منابع داده مختلف با استفاده از فناوري LINQ
خلاصه LINQ يک فناوري قدرتمند در زمان کار با داده است که دستاوردهاي متعددي را براي پياده کنندگان به ارمغان آورده است :
LINQ از دو بخش که مکمل يکديگر مي باشند تشکيل شده است : مجموعه اي از ابزار ها جهت کار با اشياء ، اسناد XML ، بانک هاي اطلاعاتي رابطه اي و ساير نوع هاي داده و مجموعه اي از ضمايم براي زبان هاي برنامه نويسي نظير VB و #C . در بخش دوم به بررسي هر يک از موارد فوق خواهيم پرداخت .
منبع :srco.ir