PDA

View Full Version : مقاله: LINQ



aminmgm
جمعه 27 اردیبهشت 1387, 00:50 صبح
1. مقدمه

1.1 هدف

ORM يک راه‌حل براي مسئله‌اي به نام "Impedance Mismatch" است."Impedance Mismatch" اشاره به تفاوت طراحي مدل شي‌گرا با مدل رابطه‌اي دارد، به اين معني که کلاس‌هاي طراحي شده در قالب مدل شي‌گرا به طور خودکار قابل نگاشت به جداول مدل رابطه‌اي نيستند.

1.2مزاياي عمومي ORM

· طراحي شفاف.فارغ شدن از جنبه‌هاي طراحي مدل رابطه‌اي،طراحي و پياده‌سازي مدل شي‌گرائي را بسيار راحتر کرده است.
· بهره‌وري.ايجاد کد بدون نگراني از محدوديت‌هاي ذخيره‌سازي کارايي را افزايش مي‌دهد.همچنين استفاده از ORM شما را از توليد کدهايي به منظور ذخيره و بازيابي اطلاعات بي‌نياز مي‌نمايد.اين کاهش 20 تا 30 درصدي توليد کد، زمان پياده‌سازي و تست را کاهش خواهد داد.

1.3معايب ORM

ساختار جداول و رابطه بين آنها بايد به طور يکسان در پايگاه‌داده و فايل‌هاي meta-data نگهداري شوند، اين امر موجب بروز مشکلاتي در زمان نگهداري خواهد شد. محيط‌هاي مختلف براي حل مشکل Code Generator هاي مختلفي ارائه نموده‌اند.
از طرفي استفاده از ORM به عنوان رابط بين BL و پايگاه‌داده منجر به کاهش سرعت ارتباط با پايگاه‌داده خواهد شد. به منظور حل اين مسئله نيز راه‌حل هايي مانند caching به منظور بالا بردن سرعت اجراي جستجوها در بيشتر ORM ها گنجانده شده‌است.

2.2LINQ

Language-Integrated Query به عنوان بخشي از .Net 3.5 همراه با VS 2008 به عنوان يک ORM به دنياي کدنويسي عرضه شد. مایکروسافت با بياني جالب علت اين نامگذاري را در نشان دادن اين مطلب که Query يک خصوصيت يکپارچه با زبانهاي برنامه‌نويسي مي‌باشد عنوان کرده است.
يکي از مشکلاتي که در برنامه‌نويسي پايگاه داده وجود دارد اين مسئله مي‌باشد که نمي‌توان دستورات پايگاه داده را به صورت Native در زبان ميزبان نوشت. اين موضوع بدين معني مي‌باشد که خطاهاي مربوط به syntax دستورات پايگاه داده در زمان اجرا تشخيص داده مي‌شوند. از مشکلات ديگر اختلاف بين نوع داده تعريف شده در پايگاه داده و زبان ميزبان مي‌باشد. اين مشکلات توسط LINQ که به صورت يک ابزار يکپارچه همراه VS 2008 معرفي گشته است ، کاملا برطرف گرديده است.
دو منبع متداول اطلاعات غير شي‌گرا پايگاه داده‌هاي رابطه‌اي و اسناد XML مي‌باشد. لازم به ذکر مي‌باشد که LINQ تنها براي پرس‌وجو بر روي پايگاه داده نمي‌باشد و از آن براي پرس‌وجو بر روي اسناد XML و يا حتي آرايه‌اي از رشته‌ها نيز مي‌توان استفاده نمود.

2.2.1IDE

درون محيط VS 2008 براي استفاده از LINQ امکانات ويژه‌اي درنظر گرفته شده است. 2008 VS شامل Designer ای جهت طراحي و نمايش Object Model موردنظر کاربر مي‌باشد. اين محيط بصورت توکار درون VS 2008 تعبيه گشته و علاوه بر يکپارچگي با ابزار برنامه نويسي ، به سادگي توسط کاربر قابل استفاده مي‌باشد. علاوه بر خصوصيات ذکر شده ، امکاناتي همچون توليد کلاسهاي مربوطه به همراه روابط بين آنها و سادگي استفاده از SP ها از قابليتهاي ديگر اين محيط مي‌باشد.
2.2.2 پرس‌وجوهاي پيشرفته

پرس‌وجوها از مسائل موردتوجه در LINQ مي‌باشند که براي آنها امکانات خاصي در نظر گرفته شده است. در پرس‌وجوهاي نوشته شده در LINQ علاوه بر قدرت و سرعت به کوتاهي و نزديکي به syntax زبان ميزبان توجه شده است. ويژگيهايي مانند Lambda Expression و Expression Trees از جمله اين امکانات مي‌باشند.

2.2.3Caching

يکي از مباحثي که در هر ORM بايد به آن توجه شود موضوع caching مي‌باشد ، به دليل اينکه ORM به خاطر ماهيت خود باعث کندي انتقال اطلاعات بين لايه Business Layer و Data Layer مي‌گردد، براي رفع اين مشکل از caching اطلاعات مي‌توان استفاده نمود. در LINQ موضوع caching در ابعاد مختلفي مورد توجه قرار گرفته است. به عنوان مثال مي‌توان با استفاده از متدهاي LINQ تغييرات را به صورت منطقي انجام داده و براي اعمال اين تغييرات بر روي پايگاه داده در زمان مناسبي اقدام نمود. علاوه بر اين عمل، LINQ در بازيابي اطلاعات موضوع caching را رعايت نموده است.

2.2.4 پياده‌سازي انواع ارتباطات بين کلاس‌ها

2.2.4.1 One to Many

پس از ايجاد پايگاه داده (که شامل جداول و روابط بين آنها مي‌باشد) مي‌توان در محيط Designer مربوط به LINQ پس از اتصال به پايگاه داده از طريقServer Explorer با drag کردن جداول و انداختن آنها در محيط Designer نگاشت بين جداول و کلاسها را به صورت خودکار انجام داد. حال اگر جداول با يکديگر رابطه داشته باشند اين روابط به طور اتوماتيک توسط LINQ شناسايي و پشتيباني مي‌شود.
2.2.4.2 Gen-Spec

به منظور پياده‌سازي اين نوع رابطه راه‌حل‌هاي متفاوتي وجود دارد. LINQ براي پياده‌سازي وراثت عملکرد ساده‌اي را در نظر گرفته است ، به اين ترتيب که کلاس پايه و تمامي کلاسهاي مشتق شده در يک جدول از پايگاه داده قرار مي‌گيرند و با در نظر گرفتن فيلدي به عنوان Discriminator (تفکيک کننده) و يک کد براي هر کلاس مالکيت هر رکورد براي کلاس مربوطه را تعيين مي‌نمايد.
با اين وجود امکان پياده‌ساري وراثت با استفاده از رابطه one-to-one که داراي کارايي بالاتري نسبت به روش فوق است وجود دارد که با توجه به پشتيباني LINQ از روابط در اين مورد قابل استفاده مي‌باشد.
2.2.5 ايجاد پوياي پايگاه‌داده

ايجاد پوياي پايگاه داده اين نياز به نحو مناسبي توسط متدهاي CreateDatabase و DatabaseExists مرتفع گرديده است.

sasa_sanaz
دوشنبه 16 شهریور 1388, 16:55 عصر
زایا و معایبlinq

_elhfarzan
دوشنبه 18 آبان 1388, 16:43 عصر
من با این زبان استارت خوبی زدم ولی نکته های ریز کاربردی رو نمیتونم کشف کنم.کتاب فارسی خوبی هم پیدا نمیکنم

Cybersilent
دوشنبه 19 بهمن 1388, 14:59 عصر
با سلام خدمت دوستان
مطالب بالا خوب بودند اما حیف که فقط در حد تئوری بودند و من فکر کنم هر کس که به این بخش میاد دنبال مقاله ای کاربردی تر باشه مثل خود من, که از روی اون بتونه حداقل فرق بین کد های linq رو با assemble تشخیص بده
ممنون میشم اگه کسی مقاله پیدا کرد در اختیار ما هم بزاره اگر هم خودش آستین بالا بزنه و بنویسه که دیگه خیر از جوونیش ببینه!
خدا زکات علم همتون رو قبول کنه .

CodeMasterX
سه شنبه 03 فروردین 1389, 19:25 عصر
جسارت نباشه ولی به نظر بنده زشته که برنامه نویسا و مهندسان و موجوداتی از این قبیل دنبال منبع فارسی برای کارشون باشند! زبانتون رو تقویت کنید و منابع انگلیسی رو مورد استفاده قرار بدید. این تکنولوژی ها تماما مال اون وره، نتیجتا عمرا منابع فارسی ای که به پای منابع خودشون برسن پیدا نخواهید کرد. تمام کسانی که طو عرصه نرم افزار، مهندسی و غیره کلا فعالیت می کنند تو همون سال های اول به این نتیجه رسیدند :لبخندساده:
Linq تکنولوژی خوبی هست، با SQLServer، XML و Object های خود دات نت هم بخوبی کار می کنه ولی شخصا شدیدا مخالف هستم که کسی با Linq شروع کنه. دقیقا مثل موقعی هست که دات نت تازه اومده بود بیرون و خیلی برنامه نویسا کارای دیتاشون رو با Wizard انجام می دادن. نتیجه نهایی این میشه که دانش کافی از Database Technologies رو ندارن. کار درست اینه که تکنولوژی های Data Access رو آدم اول خوب یاد بگیره بعد برای سهولت کارش از تکنولوژی هایی مثل Linq استفاده کنه.
چند تا لینک برای آشنایی بیشتر از Linq میذارم ولی اکیدا توصیه می کنم کتابهای انتشارات Apress و Wrox رو مطالعه کنید. انشارات زیاد خوب دیگه ای هم هستند %100 ولی من طی سالیان فعالین در صنعت نرم افزار این دو تا رو ترجیح می دم.



Linq on MSDN
http://msdn.microsoft.com/en-us/netframework/aa904594.aspx

Linq: .NET Language-Integrated Query
http://msdn.microsoft.com/en-us/library/bb308959.aspx

Linq Videos from the VB Team (Official ASP.NET Website)
http://www.asp.net/%28S%28ywiyuluxr3qb2dfva1z5lgeg%29%29/learn/linq-videos/

Introducing Linq - Part I (.NET Slackers)
http://dotnetslackers.com/articles/csharp/IntroducingLINQ1.aspx