nav-right
امین مصباحی

Entity Framework یا Linq 2 SQL یا همون ADO.NET ؟

30 / دی / 1388
   موضوع :NET. | Technical   نظرات (3)

aa937709_EF_AtAGlance_1b(en-us,MSDN_10)

یکی از بحث های داغی که تو جلسات بحث و مشورت معماری نرم افزار رایجه صحبت سر انتخاب تکنولوژی دسترسی و مدیریت داده هاست…

گزینه های پیش رو:

» ADO.NET

» Linq 2 SQL یا به اختصار L2S

» و فرزند جدید و حاصل مدت ها تحقیق و تلاش و بهبود مایکروسافت: Entity Framework  به اختصار EF

NET Framework 4.0. بلوغ EF به شمار میاد، و عملا مایکروسافت بسیار محترمانه درخواست کرده که جناب برنامه نویس ایرانی که هر 20 سال یه بار یه روش جدید رو تجربه میکنی… خواهشا سنت شکنی بفرمایید و این محصول رو یه تست بزنید بلکه به نظر ملوکانه تون بد نیومد… تو این پست سعی دارم تا این 3 تکنولوژی رو کمی مقایسه کنم البته قصد ندارم معرفی کنم بلکه هدف مقایسه است… خواهیم دید EF نسبت به SubSonics که خود من بهش خیلی ارادت دارم من حیث معماری



point مقدمه { Microsoft Entity Framework چیست ؟؟} :

ADO.NET Entity Framework به گونه ای طراحی شده است تا توسعه دهندگان را قادر سازد در مقابل مدل های مرسوم مفهومی (conceptual)، از یک مدل جدید با امکان دسترسی و برنامه نویسی مستقیم بر اساس ساختار یک دیتابیس رایطه ای استفاده نمایند، هدف از تولید این مدل کاهش چشمگیر میزان کدنویسی، سهولت گسترش، ترمیم، بهبود و نگهداری  برنامه ها بوده است. به طور خلاصه میتوان از مزایای آن به موارد زیر اشاره کرد:
» برنامه های کاربردی قادر خواهند بود تا در مدل مفهومی خود (conceptual model) محوریت بیشتری به خود برنامه ببخشند به گونه ای که شیء گرایی، ارث بری، گونه ها (Type) های پیچیده تر و روابط بین جداول و اشیاء بهتر پیاده سازی شوند.
» برنامه ها (برنامه نویس ها) از هارد کدینگ (کدنویسی زیادی ابلهانه و طاقت فرسا) رها می شوند.
» بدون کوچک ترین تغییر کد برنامه خواهیم توانست مدل ارتباط بین ساختار دیتابیس و مدل مفهومی را تغییر دهیم.
» توسعه دهندگان (برنامه نویس ها ! :D ) قادرند تا با ساختار شیء گرایانه سازگار با انواع سیستم های مدیریت دیتا کار کنند.
» مرتبط شدن چندین مدل مفهومی به یک ساختا دیتابیس.
» پشتیبانی Language-integrated query (LINQ) موجب اعتبارسنجی عبارات پرس جو (Query) در حین کامپایل میشود.


p2 انتخاب بین L2S و EF

خیلی خلاصه طبقه بندی کردم:


question چه موقع از Linq to SQL استفاده خواهیم کرد؟


وقتی میخواهیم:



از یک
ORM استفاده کنیم  و دیتابیس ما در یک رابطه 1 به 1 با مدل اشیاء قرار دارد.


از یک
ORM که  ساختار سلسله مرتبی ای را که در یک جدول ذخیره شده است ارث بری کرده باشد.


استفاده از کلاس هایی که خودمون نوشتیم در کنار کلاس های تولید شده توسط سیستم  یا ارث بری از کلاس های پایه یا پیاده سازی اینترفیس ها در کلاس ها.


استفاده از
LINQ به عنوان ابزار Query نویسی


استفاده از یک
ORM با حفظ کارآیی و امکان بهبود آن از طریق Stored Procedure ها و Query های کامپایل شده.



question چه موقع از LINQ to Entity استفاده خواهیم کرد؟


وقتی میخواهیم:



وقتی میخواهیم برنامه ما به دیتابیس های دیگری به جز
Microsoft SQL Server  نیز دسترسی پیدا کند.


وقتی میخواهیم
domain models برای برنامه مان تعریف کنیم و از آن به عنوان لایه persistence استفاده نماییم.


استفاده از کلاس هایی که خودمون نوشتیم در کنار کلاس های تولید شده توسط سیستم  یا ارث بری از کلاس های پایه یا پیاده سازی اینترفیس ها در کلاس ها.


از یک راهکار
ORM ی استفاده کنیم که ممکن است کلاس هایمان رابطه ای 1:1 با دیتابیس داشته باشد یا ممکن است ساختاری بسیار متفاوت و پیچیده در ارتباط با دیتابیس دارا باشد.


می خواهیم از یک
ORM استفاده کنیم که ساختارهای سلسله مرتبی در آن معادل های دیتابیسی متفاوتی دارا باشد مانند وقتی که جدولی جهت نگهداری سلسله مراتب، جداولی برای هر یک از کلاس ها و جدولی جهت نگهداری گونه (Type)
خاص داریم.


وفتی میخواهیم از
LINQ جهت نوشت Query ها استفاده کنیم در حالیکه Query در دیتابیس به شیوه خاص و در سلطه سازنده آن عمل می کند
.


استفاده از یک
ORM با حفظ کارآیی و امکان بهبود آن از طریق Stored Procedure ها و Query های کامپایل شده.

 

question
چرا از Entity Framework استفاده کنیم؟

» دسترسی به داده ها را ساده می سازد و به من اجازه می دهد تا مدل مفهومی مورد نیاز برای کسب و کارم را ایجاد کنم.

» EF  اجازه می دهد تا شما روابط چند به چند (n:n) را بدون join ها متعدد مدیریت نمایید.

» جهت کاهش پیچیدگی کد جداول مرتبط را در یک Entity مدل کنید.

» پشتیبانی قئی و خفن از ارث بری ها برای جدول به ازای سلسله مراتب، زیرکلاس (subclass) و تایپ های به هم چسبیده (concrete type).

» Consolidation برای اشیاء پیچیده بسیار ساده است.

» چون دارای مکانیسم بسیار قوی Query گیری از Entity هاست. کسانی که مایل با استفاده از LINQ  نیستند می توانند از  EntityClient provider  همرا با EntitySQL استفاده نمایند.

» میتوانید با استفاده از ADO.NET Data Services (Astoria). دیتای مدل شده خودتان را انتشار دهید.

» مستقل از نوع دیتابیس می باشد و بر اساس استاندارد ADO.NET Providers. کار می کند.

»  هم اکنون تعداد زیادی شرکت های دیگر provider هایی ارائه و پیشنهاد کرده اند مانند:

    * Devart جهت استفاده ازOracle, MySQL  و  PostgreSQL EF توصیه می شود.
    *  Phoenix Software Solutionجهت استفاده از SQLite  EF را توصیه می کند.
    * Npgsql برای استفاده از PostgreSQL  provider دیگری را توصیه کرده.
    *  OpenLink Software طیف وسیعی را جهت استفاده از for Oracle (versions 7.x to 11.x), Microsoft SQL Server (6.x to 2005), IBM DB2 , Sybase (4.2 to 12.x+), IBM Informix (5.x to 11.x), Ingres (6.4 to 9.x), Progress (7.x to 10.x), MySQL, PostgreSQL,  و Firebird  پیشنهاد کرده است.
    * Sybase SQL Anywhere  از SQL Anywhere پشتیبانی می نماید.
    * IBM پشتیبانی دیتابیس هایی مانند DB2, Informix  و U2  را خودش عهده گرفته است.

» بخش های دیگر زیادی به آن افزوده خواهد شد...


ee402630_blog_lg

 نتایج یک مقایسه بین Entity Framework و Subsonic

با اینکه Subsonic رو به لحاظ معماری خیلی قبول دارم ولی یه مقایسه ساده رو میزارم تا ببینید چقدر به لحاظ کارآیی Entity Framework سره:

تست ساده ایه که میتونم سورسش رو بزارم برای دانلود، ملاک اینجا زمان مورد نیاز جهت لود کردن مقادیر مختلفی از اطلاعاته:

Subsonic

Entity Framework

3937

1312

1906

140

1062

156

1078

140

1062

140

مقادیر به میلی ثانیه است

 

 

میبینید که Entity Framework نتیجه بسیار بهتری داره…

امیدوارم معمارهای نرم افزار و برنامه نویس های ایرانی هم همگام شن تا بتونیم این فضاحت کنونی عرصه کیفیت نرم افزارهای تولید داخل رو بهبود بدیم Praying

برچسب ها: , ,

نظرات

#

Hamid Reza

سلام استاد،خيلی خوشحالم که دوباره آپديت می کنيد و نوشتن رو شروع کرديد.دلمون همnبرای شما تنگ شده و اميدوارم هر چه زودتر شما رو زيارت کنيم و از کلاس های علمی واخلاقی شما
کسب فيض کنيم.براتون بهترين ها رو آرزو می کنم...

Hamid Reza Iran | پاسخ به این نظر

#

محمدامین مصباحی

حمیدرضای عزیز، از ابراز لطف و محبتت بسیار ممنونم.
من هم دلم برات خیلی تنگ شده و امیدوارم سریعتر ببینمت.

محمدامین مصباحی Iran | پاسخ به این نظر

#

افشار

دمت گرم خیلی از مطالب رو گرفتم

افشار Uruguay | پاسخ به این نظر

ارسال نظر




  Country flag

biuquote
  • نظر
  • پیش نمایش زنده
Loading



درباره من...

محمدامین مصباحی، همین و بس...