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

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

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

برچسب ها: , ,

نظرات (8) -

Iran Hamid Reza
چهار شنبه 30 دی 1388 ساعت 20:09 #

Hamid Reza

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


Iran محمدامین مصباحی
پنج شنبه 1 بهمن 1388 ساعت 12:56 #

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

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


Uruguay افشار
چهار شنبه 5 خرداد 1389 ساعت 15:08 #

افشار

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


Iran شاهین کیاست
جمعه 16 مهر 1389 ساعت 23:40 #

شاهین کیاست

سلام جناب صباحی Smile
بسیار لذت بردم از پست شما Smile
وبلاگ بسیار مفیدتون به لیست Bookmark من اضافه شد.
جناب صباحی لطفا در صورتی که وققتون اجازه می دهد سوالات من را پاسخ بدید یا لینکی برای اطلاعات بیشتر قرار دهید. ممنون
1)ساختار سلسله مرتبه ای چه ساختاری هست؟
2)Domain Model چه تفاوتی با Service Model دارد؟
3)لایه ی persistence   به چه معنا می باشد؟ من فقط اندکی با مفهوم این لایه در WorkFLow آشنا هستم.
4) EF را در مقایسه با Nettiers (الگو ی تولید کد برای CodeSmith) چگونه می بینید؟
ممنون Smile


Iran Amin Mesbahi
شنبه 17 مهر 1389 ساعت 19:13 #

Amin Mesbahi

سلام
1- از حسن نظر و توجهتون متشکرم
2- ساختار سلسله مرتبی رو مانند گروه کالا در نظر بگیرید، مرحله اول کالا که در مرحله دوم به دو شاخه ی کالای الکترونیکی و یا کالای غیرالکترونیکی تقسیم میکنیم، کالای الکترونیکی را به قابل حمل و یا غیر قابل حمل و... به عنوان مثال دیگر می توان به چارت خانوادگی (پدر، پدربزرگ و نوه و بچه ها) که به صورت سلسله مراتبی قرار دارند... به طور خلاصه: اطلاعاتی که نسبت به یکدیگر رابطه ی والد و فرزندی دارند و تقدم تاخر آنها همانند صف نیست...

3- Domain Model: در مباحث مهندسی نرم افزار به بیانی از اشیاء و روابط بین آنها در یک سیستم (چارچوب مرتبط به هم)گفته می شود.
Service Model: نوعی معماری که مورداستفاده ساختارهای سرویس گرا (SOA) و یا چند لایه می تواند قرار گیرد و قادر به تبادل اشیاء به صورت سبک و مناسب برای تبادل محیا می سازد.


Iran Amin Mesbahi
شنبه 17 مهر 1389 ساعت 19:30 #

Amin Mesbahi

در صورتی که تفکیک ساختاری اشیا مدنظر باشد، استفاده همزمان از دو معماری توصیه میشه... دلایلش زیاده میشه در قالب یک پست بهش پرداخت.

4- Persistence Layer: به کلاس هایی گفته می شود که با در برداشتن مفاهیم ارث بری، کپسوله سازی و ... امور مورد نظر جهت کار با دیتابیس را دارا هستند، مثلا شما آبجکت (کلاس) دانشجو داریدکه دارای متدهایی برای افزودن، حذف، ویرایش و.. می باشد و شما تنها با صدا کردن آنها این امور را در دیتابیس انجام می دهید. عموما در این نوع معماری قالیت پشتیبانی از چند نوع دیتابیس نیز دیده میشود. به این صورت که شما با صرف نظر ازنوع دیتابیس فقط متد افزودن، حذف و.. را فراخوانی میکنید...
5- خیلی سوال کلی ای پرسیدید، ولی هرکدوم مزایایی دارند... EF چندین نوع دیتابیس را پشتیبانی میکند و یا LINQ 2 Entity و یا بحث Forward, Backward Design و کلی چیز دیگه و خصوصا تکیه ی خود مایکروسافت از اون طرف NET Tiers. ساخت خودکار SP ها یا ... بهتره مقایسه کنیم. البته من تو همسن بلاگ EF رو با چند فریم ورک دیگه مقایسه کردم...

امیدوارم پاسخ سوالاتتون کافی بوده باشه در غیر این صورت از طریق ایمیل و یا به صورت حضوری یا تلفنی میتنونیم راجع بهشون صحبت کنیم....
موفق باشید


Iran شاهین کیاست
شنبه 17 مهر 1389 ساعت 20:22 #

شاهین کیاست

جناب مصباحی جدا از حواب سریع و مفصلتون شرمنده شدم Smile جدا که درخت هر چه پر بار تر افتاده تر.
4 پاسخ اول را کاملا متوجه شدم.
و سوال آخر نیاز به باز کردن ییشتر دارد.
در میان انبوه ORM ها
llblgen Pro
Codesmith (که ORM نیست؟!)
.
.
.
و  مواردی که شما فرمودید.
بنده به دلیل سازگاری Entity Framework با تکنولوژی های مختلف Microsoft و Design Pattern های آن مثل MVVM در WPF و Silverlight و توضیحات شما و مقایسه به جای شما شروع به یادگیری آن کرده ام هر چند تجربه ی استفاده از NEttiers و LINQ را دارا هستم.
باز هم از حسن توجه شما متشکرم
امیدوارم نسبت به نظرات و سوالات بنده درآینده کلافه (Tong) نشوید Smile


Iran Amin Mesbahi
شنبه 17 مهر 1389 ساعت 23:47 #

Amin Mesbahi

دو تا پیشنهاد رو هم از من به یادگار داشته باشید
Telerik OpenAccess ORM
IdeaBlade devForce
هم با EF هماهنگ هستند هم کلی قابلیت عالی...


ارسال نظر

  Country flag

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

درباره نویسنده

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

نمونه سوالات آزمون ارزیابی #C

آزمون ارزیابی c#
دانلود نمونه سوالات ارزیابی دانش برنامه نویسی #C جهت ثبت نام در دوره های:

 

WCF

ASP.NET (MVC, Web Forms)

SharePoint (Development)

Silverlight

Design Patterns

 

دانلود

 

 

آرشیو ماهانه پست ها