aminmgm
جمعه 27 اردیبهشت 1387, 01: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 مرتفع گرديده است.
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 مرتفع گرديده است.