1- جدا کردن خودتان از SQL
به عنوان یک برنامه نویس دیتابیس ممکن است زمان و هزینه زیادی روی یادگیری SQL گذاشته باشید. پس برای شما منطقی نیست که SQL را رها کنید و به سراغ ابزارهای دیگر بروید. اما به عنوان یک برنامه نویس چطور؟ شما به عنوان یک برنامه نویس که تمامی انرژی خود را روی یادگیری محیط و زبان برنامه نویسی گذاشته اید و زمانی برای یادگیری SQL نذاشته اید. با این شرایط ممکن است دانش شما در SQL Server پایین باشد و اعمالی که در SQL Server انجام میدهید بهینه و صحیح نباشد. با استفاده از Entity Framework خود را از SQL Server جدا کرده اید و کارهای عمومی را به Entity Framework میسپارید و اعمال تخصصی را نیز به متخصصین واقعی SQL Server واگذار میکنید تا تمامی کارها در بهترین شرایط انجام شود.
2-ساده سازی کارها
هنکامی که از Entity Frameowrk استفاده میکنید بیشتر کوئری های خود را به کمک Linq و در محیط توسعه خود پیاده سازی میکنید. بیشتر کارهایی که میخواهید هنگام کوئری نویسی انجام دهید مثل Join, Where, Order by و … همگی به کمک Linq قابل پیاده سازی است. در کل Linq برای برنامه نویسانی که آشنایی کمتری با SQL Server دارند کوئری های بهتر و بهینه تری تولید میکند تا خود برنامه نویس. در محیط های برنامه نویسی که برنامه نویسان آشنایی کمی با SQL Server دارند، کوئری های نوشته شده توسط آنها به زودی به یکی از گلوگاه های برنامه تبدیل میشوند. امروزه اکثر ORM ها از Linq پشتیبانی میکنند. یادگیری و استفاده از Linq برای افرادی که آشنایی کمی با SQL دارند بسیار ساده تر از یادگیری و استفاده صحیح از SQL است.
3- جدا شدن از Data Model:
در صورتی که از آن دسته برنامه نویس هایی هستید که ابتدای امر به جای طراحی نرم افزار به طراحی دیتابیس میپردازید، باید به شما بگویم که با این کار شما طراحی نرم افزار خود را به مدل دیتابیس خود گره زده اید و با اعمال تغییرات در پایگاه داده، باید نرم افزار خود را نیز تغییر دهید. اما هنگامی که به عنوان یک برنامه نویس از EF استفاده میکنید، ساختار ذهنی شما از ساختار بانک های اطلاعاتی رابطه ای جدا شده و کاملا به صورت شی گرا نرم افزار خود را طراحی و پیاده سازی میکنید و هرجا که نیاز به استفاده از داده ها داشته باشید EF اطلاعات را برای شما فراهم میکند و کار بهینه سازی و عملکرد صحیح SQL Server را نیز به عهده متخصصین SQL Server میگذارید.
4- جدا سازی بهتر قسمت های مختلف نرم افزار:
جدا سازی قسمت های مختلف برنامه یا به اصطلاح Separation of Concerns نیز از قابلیت های ویژگی های دیگر استفاده از EF در برنامه میباشد. در این روش شما تنها با کلاس ها سر و کار دارید و کلیه کارهای نرم افزار خود را با کلاس ها انجام میدهید. بدون در نظر گرفتن اینکه داده های مورد نیاز در کجا نگه داری خواهند شد.
5- Code First
از آخرین ویژگی هایی که EF اضافه شد Code First است که به کمک آن شما کلاسهای خود را طراحی میکنید، در قسمت دیگری میتوانید قابلیت هایی که در دیتابیس نیاز دارید را نیز تنظیم کنید و سپس پایگاه داده را نیز به صورت اتوماتیک از روی مدل برنامه ایجاد کنید. هر تغییری که در کلاسهای خود ایجاد میکنید به کمک قابلیت Migration میتوانید اتوماتیک به پایگاه داده انتقال دهید و در کل به صورت کامل از پایگاه داده ایزوله میشود.
خلاصه:
در طی این مطلب کوتاه سعی کردیم با برخی از مزایای EF برای برنامه نویسان آشنا شویم، البته شایان ذکر است که این مزایا برای اغلب ORMها صادق است. اما چون EF ابزار توسعه داده شده توسط خود مایکروسافت است و به جرات میتوان گفت از بهترین و به روزترین ORMهای موجود در بازار است، و بهترین عملکرد را با Linq دارد در گفته های خود از EF نام میبردیم. در ادامه با EF بیشتر آشنا خواهیم شد.
منبع: آموزش برنامه نویسی نیک آموز
28 دیدگاه
فرشید علی اکبری
سلام دوست عزیز
علیرضا ارومند
سلام و وقت به خیر
ممنون که زمان گذاشتید و مطلب را مطالعه کردید. اما چند تا نکته بود که شاید بهتر باشه به اونها دقت کنیم.
هیچ
جای مطلب گفته نشده صرفا به خاطر جدا سازی از SQL از EF استفاده میکنیم.
اگر به مطلب دقت کنید حداقل 5 مورد نام بردم که جدا شدن از SQL یکی از
اونهاست. 🙂
مجدد در همون قسمت ذکر شده که جاهایی که واقعا نیاز به کار
حرفه ای با SQL وجود دارد این کار را به افراد حرفه ای واگذار میکنیم پس
نظر ما قطع رابطه با SQL نیست بلکه استفاده صحیح از ابزارها در جایگاه خودشون هست.
در
مورد اینکه در بسیاری از قسمت های پروژه ما نیاز داریم از دستورات SQL در
client استفاده کنیم هم بحث بسیار گسترده ای داره که بیشتر مربوط به طراحی و
معماری صحیح نرم افزار میشه، بخصوص در پروژه های بزرگ که مثال زدید اگر به
راهکارهای DDD رجوع کنیم میبینیم این استفاده عملا با بسیاری از قواعد DDD
سازگار نیست، حتی اصل اولیه SOC را نیز زیر سوال میبرد .با عرض پوزش اما
در این شرایط به نظر بیشتر اشکال در طراحی نرم افزار و پیاده سازی دیتابیس
میاد تا یک نیاز واقعی نرم افزار که البته توضیح بیشتر در این مقال
نمیگنجد. در مورد سناریو مطرح شده توسط شما هم به نظرم بیشتر شبیه قسمت های
گزارش ساز نرم افزارها هست تا خود Business Logic برنامه که اگه اینطور
باشه هم باز به نظر باید ابزار مناسب توسعه انتخاب بشه.
اگر قسمت خلاصه
مطلب رو دقت کنید نوشتم که بیشتر مزایای گفته شده مربوط به ORMها هست و نه
تنها EF و هدف بیشتر بررسی شرایط کارکرد با ORM و بدون ORM بوده و توجه
صرفا به EF و اون هم نسخه خاصی از EF یعنی نسخه 7 اصلا در این مطلب مطرح
نیست که باز هم خود این موضوع مطلب بسیار گسترده ای است. 🙂
موفق باشید.
مسعود طاهری
علیرضا جان عالی بود
salehi
ممنون از مطلب ارسالی
مجتبی شهریور
سلام
مرسی واقعا عالی بود
التماس دعا..
ساناز احمدی
سلام
متشکرم
خیلی خیلی دستتون درد نکنه
tiyara9090@hotmail.com
mr30
motshakeram aghaie mohandes
محمد طارمی
سلام آقای ارومند
نکاتی خوبی بود.
به نظر من اگر بیشتر به حوضه ی کاری اون ORM پرداخته بشه خیلی بهتره مثلا مزایا و معایب یا تجارب شخصی د خصوص استفاده از این ابزار، چون شخصی که میخواهد با این ORM شروع بکار بکند دید خیلی خوبی نسبت به آن پیدا خواهد کرد و در همان ابتدای راه ابزار درست و مناسبی جهت انجام پروژه استفاده میکند.
امیدوارم این قبیل مطالب ادامه داشته باشد.
سپاس از مطلب شما
علیرضا ارومند
سلام آقای طارمی
انشاالله همین طور که گفتید مطالب آموزشی ادامه دار و
هدف دارتر خواهند بود. با توجه به اینکه کمتر از ORMها در سایت صحبت شده
بود و بیشتر تمرکز روی SQL Server بود صرفا خواستیم شروعی به بحث ORMها و به خصوص EF داشته باشیم.
m
سلام
نکات خوبی بود. تشکر از زحماتتون
محمدحسین عبدالهی
سلام
تشکر بابت مقاله خوبتون
دوستان راجع به صحت اینکه ADO.Net رو اگر به صورت استاندارد و دقیق کوئری نویسی کنیم که از تزریقات جلوگیری کنه و … سرعت ADO.Net محض از EF یا هر ORM دیگه ای بیشتره مطلبی شنیدین ؟
میدونیم که تمامی این دستورات در پایان تبدیل می شن به دستورات SQL ، حالا این مسیر به نظر دوستان طولانی تر شده یا مسائلی مثل استفاده از کش باعث تسریع سرعت بیشتر EF یا LINQ هست؟
علیرضا ارومند
سلام آقای عبدالهی
با توجه به اینکه EF روی ADO.NET ساخته شده و در نهایت از امکانات ADO.NET استفاده میکنه مسلما سرعت ADO.NET بیشتر از EF هست.
1- برنامه هایی که برپایه EF ایجاد میشوند در نوبت اول اجرا بخاطر اینکه یک نسخه از مدل شما باید از طریق متادیتاهای موجود ایجاد شود زمان بیشتری دارد اما در نوبت های بعد این کار سریع تر میشود که البته باز هم به سرعت ADO.NET خالص نمیرسد چرا که این یک فریم ورک بر فراز ADO.NET است.
2- شما وقتی از EF استفاده میکنید بعد از اینکه داده ها واکشی شد باید دادههای
خام به ساختار کلاسهای شما تبدیل شوند و این تبدلها مسلما زمان برهست
هرچند این زمان بسیار کم باشه.
3- اما در نظر گرفتن این نکته ها خالی از لطف نیست که شما موقع استفاده از EF سرعت توسعه بسیار بالاتری دارید.
4- هنگام نگهداری نیز کدهای شما وقتی از EF استفاده میکنید قابلیت نگهداری بهتری دارند. در دنیای برنامه نویس شی گرا این قابلیت ها چیزی نیست که بتوان به راحتی از آنها چشم پوشی کرد.
نتیجه: در کل در صورتی که دیتابیس خوبی طراحی کرده باشید که بالاترین بازده را به شما بدهد، و نیاز شما به سرعت بسیار بسیار حیاتی نباشد، در حد هزارم های ثانیه،و در نهایت کدهای EF خود را با نهایت دقت پیاده سازی کنید، میتوان از اندک کندی EF در برابر امکانات فوق العاده ای که در اختیار قرار میدهد گذشت.
البته باز هم نکته دیگری وجود دارد و آن اینکه در شرایطی مسائل بالا صحت دارد که برنامه نویس شما کاملا مسلط به SQL و ADO.NET باشد که در صورتی که نباشد و کدهای آسیب پذیر و غیر بهینه ای تولید کند احتمال خرابی و کندی در این حالت بیشتر است.
موفق باشید
ساناز احمدی
سلام
من نمی دونستم کجا این پیام یا بهتره بگم پیشنهاد را بدم و اولین مقاله ی که دیدم این کارو کردم به هر حال ببخشید شاید به جا نباشه ولی لازم دونستم بگم بهتر نیست برای ما که خیلی تبهر نداریم و یا همه دوستان عضو و علاقمند یک نقشه راه از صفر تا صد با توجه با مطالب وافر و کافی سایت در نظر گرفته می شد تا هدفمند به جلو حرکت می کردیم
متشکرم
مدیا مهربانیان
با سلام و تشکر بسیار،واقعا عالی بود
بابک جهانگیری
بسیار توضیحات خوب و شفافی ارائه فرمودید مخصوصا این قسمت : ” چون EF ابزار توسعه داده شده توسط خود مایکروسافت است و به جرات میتوان گفت از بهترین و به روزترین ORMهای موجود در بازار است”
با تشکر از شما
حسین
سلام خسته نباشید !
MEHDI
سلام ممنون بابت مقاله خوبتون
اگه امکانش هست یک فیلم آموزشی در همین رابطه تهیه بشه عالیه ک به صورت عملی کار با EF و کاربرداش رو توضیح بده
محمدرضا خاکپور
من خودم تا حدودی با ef و با sql آشنا هستم
اما بنظرم قدرت کوئری نویسی sql خیلی خیلی از ef قویتره یعنی از linq قویتره.
آیا درست فکر میکنم که نمیشه خیلی از کوئری های sql رو تو linq نوشت؟
مسعود طاهری
بلی درست می فرمایید.
علیرضا ارومند
محمدرضا جان سلام
حسین کولانی
ضمن تشکر از آموزش های بسیار خوب شما
دقیقا این امکانات درجای خودش بسیار مفید می باشد و ای کاش جای صحیح آن راهم در آموزش ها ذکر کنید.
درپروژه ای مجبور شدم به خاطر حجم دیتا اسکریپنی سمته دیتابیس اضافه کنم برخی طوری با این کار من برخورد کردند که گویی قرآن خدا نقض شده است .ما نمیتونیم جایی که با حجم دیتا و Performance درگیر میشیم به کاربر بگوییم حالا یک چرت بزن تا دیتای ما بارگذاری بشه .
هر نوع دیتابیسی برای خودش قابلیتهایی دارد که برای کسانی که با ef شروع به کدنویسی میکنند ممکنه ناشناخته بمونه ودرآخرفکر کنند مشکل از ef هست در حالی که ef تنها یک ابزار هست که بسیاری از مشکلات را حل میکنه ومزایای زیادی دارد و حتما استفاده کنید .
فقط یک نکته داره ، اگر با ef پروژه ای انجام میدهید متدهای خود را با دیتای بسیار بالا تست کنید چرا که برای کوئری های سبک عالی جواب میده ولی بعد از اینکه یکسال از نصب پروژه گذشت و دیتای شما سنگین شد تازه میفهمید که چطور بایستی با ef کد نویسی میکردید .
سید عماد آرمون
سلام
می خواستم بدونم نظر شما در مورد راه حل های ترکیبی چیه؟ یعنی در بخش غالب نرم افزارمون از EF استفاده کنیم و جاهایی که بحث کارایی خیلی مهم هست از همون روش Ado.Net استفاده کنیم؟؟؟
مسعود طاهری
عماد عزیز سلام
علیرضا ارومند
سلام عماد عزیز
حیدر
خوب چجوری شروع کنیم؟
حسین جهان بین
با سلام و احترام خدمت اساتید بزرگوار
مجید
سلام جناب آقای ارومند
وقت تون بخیر
از مطالب ارزشمندتون کمال سپاس را دارم
شما در Microsoft Build 2018 فرمودید که از Lazy Loading استفاده نکنیم چون نشتی دارد
سوال مهمی که دارم این است که در بحث MVC و استفاده از پترن Repository و UnitOfWork باید چکار کرد یا چگونه انجام داد؟
آرزو محمدزاده
با سلام و عرض ادب
سوال شما کمی نامفهون است اما استفاده از lazy loading یک ابزار است و repositoryو uow دو الگو که هیچ ارتباطی بین این ها وجود ندارد
در مورد چگونگی پیاده سازی این الگو ها در mvcهم روش های خیلی زیادی وجود داره که در دوره Modern Data Layer به آن اشاره شده است شما می توانید سرفصل های این دوره را از لینک زیر مشاهده نمایید.
https://nikamooz.com/product/modern-data-layer/