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

27 Comments

  1. فرشید علی اکبری

    فرشید علی اکبری

    سلام دوست عزیز

    با توجه به اینکه همگی دات نت کاران از مزایای استفاده از ORM – Code First- SQL SERVER کم و بیش اطلاعات مفیدی در اختیار داریم و از طرفی با توجه به ارائه EF7 توسط شرکت مایکروسافت و تغییرات بسیار شدیدی که در زمینه بهینه سازی این ORM و تمرکز مایکروسافت بر روی توسعه روزمره وپشتیبانی آن مشاهده میشود،کمتر برنامه نویسی صرفاً بخاطر استفاده از EF فاصله خود را از SQL SERVER بیشتر میکند و بنظر من برنامه نویسی که اطلاعات نسبتاً خوبی از SQL SERVER نداشته باشد، در استفاده از ORM و Linq هم نمی تواند بطور حرفه ای و موفق عمل کند.
    در بسیاری از قسمت های پروژه خود، ما نیاز داریم که از دستورات SQL در سمت Client و در سورس Application خود کد زده وسپس به Server پاس دهیم ودر اینجاست که تفاوت میان برنامه نویسانی که بخاطر راحت طلبی تنها وتنها به ORM و Linq تکیه کرده اند و آن دسته از برنامه نویسانی که از کدنویسی سمت Server و استفاده از TSql در سورس نرم افزارهای خود غافل نشده اند، بطور کاملا محسوس در طول زمان و مخصوصاً هنگام عملیاتی شدن سیستم برای مشتریان قابل مشاهده خواهد بود.
    در  اینجا بد نیست به Entity Framework 7 نیز اشاره ای کنیم که متدها و Propertyهای زیادی که در نسخه های قبلی وجود داشت حذف و یا تغییر نام داده شده و یا در فضاهای نامی دیگری قرار داده شده و متدهای جدید وبسیار کاربردی هم به آن اضافه شده که لذت کار با این ORM را چند برابر میکند و خارج از بحث موضوع این مقاله است.

    پاسخ دادن
    1. علیرضا ارومند

      علیرضا ارومند

        سلام و وقت به خیر
      ممنون که زمان گذاشتید و مطلب را مطالعه کردید. اما چند تا نکته بود که شاید بهتر باشه به اونها دقت کنیم.
      هیچ
      جای مطلب گفته نشده صرفا به خاطر جدا سازی از SQL از EF استفاده میکنیم.
      اگر به مطلب دقت کنید حداقل 5 مورد نام بردم که جدا شدن از SQL یکی از
      اونهاست. 🙂
      مجدد در همون قسمت ذکر شده که جاهایی که واقعا نیاز به کار
      حرفه ای با SQL وجود دارد این کار را به افراد حرفه ای واگذار میکنیم پس
      نظر ما قطع رابطه با SQL نیست بلکه استفاده صحیح از ابزارها در جایگاه خودشون هست.
      در
      مورد اینکه در بسیاری از قسمت های پروژه ما نیاز داریم از دستورات SQL در
      client استفاده کنیم هم بحث بسیار گسترده ای داره که بیشتر مربوط به طراحی و
      معماری صحیح نرم افزار میشه، بخصوص در پروژه های بزرگ که مثال زدید اگر به
      راهکارهای DDD رجوع کنیم میبینیم این استفاده عملا با بسیاری از قواعد DDD
      سازگار نیست، حتی اصل اولیه SOC را نیز زیر سوال میبرد .با عرض پوزش اما
      در این شرایط به نظر بیشتر اشکال در طراحی نرم افزار و پیاده سازی دیتابیس
      میاد تا یک نیاز واقعی نرم افزار که البته توضیح بیشتر در این مقال
      نمیگنجد. در مورد سناریو مطرح شده توسط شما هم به نظرم بیشتر شبیه قسمت های
      گزارش ساز نرم افزارها هست تا خود Business Logic برنامه که اگه اینطور
      باشه هم باز به نظر باید ابزار مناسب توسعه انتخاب بشه.
      اگر قسمت خلاصه
      مطلب رو دقت کنید نوشتم که بیشتر مزایای گفته شده مربوط به ORMها هست و نه
      تنها EF و هدف بیشتر بررسی شرایط کارکرد با ORM و بدون ORM بوده و توجه
      صرفا به EF و اون هم نسخه خاصی از EF یعنی نسخه 7 اصلا در این مطلب مطرح
      نیست  که باز هم خود این موضوع مطلب بسیار گسترده ای است. 🙂
      موفق باشید.

      پاسخ دادن
  2. salehi

    salehi

     ممنون از مطلب ارسالی

    پاسخ دادن
  3. مجتبی شهریور

    مجتبی شهریور

    سلام
    مرسی واقعا عالی بود
    التماس دعا..

    پاسخ دادن
  4. ساناز احمدی

    ساناز احمدی

     سلام
    متشکرم
    خیلی خیلی دستتون درد نکنه

    پاسخ دادن
  5. محمد طارمی

     سلام آقای ارومند
    نکاتی خوبی بود.
    به نظر من اگر بیشتر به حوضه ی کاری اون ORM پرداخته بشه خیلی بهتره مثلا مزایا و معایب یا تجارب شخصی د خصوص استفاده از این ابزار، چون شخصی که میخواهد با این ORM شروع بکار بکند دید خیلی خوبی نسبت به آن پیدا خواهد کرد و در همان ابتدای راه ابزار درست و مناسبی جهت انجام پروژه استفاده میکند.
    امیدوارم این قبیل مطالب ادامه داشته باشد.
    سپاس از مطلب شما

    پاسخ دادن
    1. علیرضا ارومند

      علیرضا ارومند

        سلام آقای طارمی
      انشاالله همین طور که گفتید مطالب آموزشی ادامه دار و
      هدف دارتر خواهند بود. با توجه به اینکه کمتر از ORMها در سایت صحبت شده
      بود و بیشتر تمرکز روی SQL Server بود صرفا خواستیم شروعی به بحث ORMها و به خصوص EF داشته باشیم.

      پاسخ دادن
  6. m

    m

     سلام 
    نکات خوبی بود. تشکر از زحماتتون

    پاسخ دادن
  7. محمدحسین عبدالهی

    محمدحسین عبدالهی

     سلام

    تشکر بابت مقاله خوبتون

    دوستان راجع به صحت اینکه ADO.Net رو اگر به صورت استاندارد و دقیق کوئری نویسی کنیم که از تزریقات جلوگیری کنه و … سرعت ADO.Net محض از EF یا هر ORM دیگه ای بیشتره مطلبی شنیدین ؟

    میدونیم که تمامی این دستورات در پایان تبدیل می شن به دستورات SQL  ، حالا این مسیر به نظر دوستان طولانی تر شده یا مسائلی مثل استفاده از کش باعث تسریع سرعت بیشتر EF یا LINQ هست؟

    پاسخ دادن
    1. علیرضا ارومند

      علیرضا ارومند

       سلام آقای عبدالهی
      با توجه به اینکه 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 باشد که در صورتی که نباشد و کدهای آسیب پذیر و غیر بهینه ای تولید کند احتمال خرابی و کندی در این حالت بیشتر است.
      موفق باشید

      پاسخ دادن
  8. ساناز احمدی

    ساناز احمدی

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

    پاسخ دادن
  9. مدیا مهربانیان

    مدیا مهربانیان

     با سلام و تشکر بسیار،واقعا عالی بود

    پاسخ دادن
  10. بابک جهانگیری

     بسیار توضیحات خوب و شفافی ارائه فرمودید مخصوصا این قسمت : ” چون EF ابزار توسعه داده شده توسط خود مایکروسافت است و به جرات میتوان گفت از بهترین و به روزترین ORMهای موجود در بازار است”  

    با تشکر از شما 

    پاسخ دادن
  11. حسین

        سلام  خسته نباشید !

    1.من یک پروژه باcode first نوشتم و روی لوکال هم   دیتابیس ایجاد میشه مشکلی نداره , اما وقتی اپلود کردم میگه که شما پریمیژن نداری هر کاری می کنم جواب نمی ده
    2. میشه یه کاری کرد که وقتی توی code first  کلاس ها رو تغییر می دیم تغییرات رو دیتابیس انجام بشه ولی دیتابیس پاک نشه اخه اگه تغییری بدیم پاک میشه و از نو ساخته میشه؟
    مرسی از زحماتتان
    پاسخ دادن
  12. MEHDI

    MEHDI

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

    پاسخ دادن
  13. محمدرضا خاکپور

    محمدرضا خاکپور

      من خودم تا حدودی با ef و با sql آشنا هستم
    اما بنظرم قدرت کوئری نویسی sql خیلی خیلی از ef قویتره یعنی از linq قویتره.
    آیا درست فکر میکنم که نمیشه خیلی از کوئری های sql رو تو linq نوشت؟

    پاسخ دادن
    1. مسعود طاهری

      مسعود طاهری

          بلی درست می فرمایید.

      قدرت TSQL خیلی بالا است
      پاسخ دادن
    2. علیرضا ارومند

      علیرضا ارومند

      محمدرضا جان سلام

      شاید دوست داشته باشید که نظر شما تایید بشه، اما تجربه ثابت کرده که توی دنیای برنامه نویسی هیچ چیز ثابت نیست و همه چیز به شرایط بستگی داره. مهمه که شما شرایط کار رو بسنجی. یه جاهایی لازمه برای داشتن پرفورمنس از ابزارها چشم پوشی کنیم، یه جاهایی ممکنه به خاطر سرعت بیشتر به جای استفاده از لگوهای درست از anti pattern ها استفاده کنیم. دقیقا برعکسش هم صادقه، یه جایی ممکنه به خاطر productivity قید بعضی امکانات جدید SQL رو بزنیم یا از ابزارهایی مثل ORM ها استفاده کنیم. در کل توسعه دهنده خوب، توسعه دهنده ای هست که ابزارهای مختلف رو بشناسه و در جای درست از ابزار درست استفاده کنه نه اینکه صرفا به خاطر علاقه به ابزاری خاص در هر شرایطی از ابزار یا الگوهای مورد علاقه خودش استفاده کنه.
      موفق باشید
      پاسخ دادن
  14. سید عماد آرمون

    سید عماد آرمون

       سلام
    می خواستم بدونم نظر شما در مورد راه حل های ترکیبی چیه؟ یعنی در بخش غالب نرم افزارمون از EF استفاده کنیم و جاهایی که بحث کارایی خیلی مهم هست از همون روش Ado.Net استفاده کنیم؟؟؟

    پاسخ دادن
    1. مسعود طاهری

      مسعود طاهری

          عماد عزیز سلام

      من هم به شخصه این مورد را قبول دارم در برخی از موارد باید سراغ استفاده از ADO.NET رفت مخصوصا زمانی که EF از دستورات جدید پشتیبانی نکند. در مورد جاهایی که مبحث Performance مهم است هم باید این نکته را در نظر داشت
      پاسخ دادن
    2. علیرضا ارومند

      علیرضا ارومند

      سلام عماد عزیز

      با نظر شما و آقای طاهری 100% موافق هستم، و به نظرم درست اینه که با توجه به شرایط ابزارهای مورد استفاده را انتخاب کنیم نه اینکه تک بعدی کاری را جلو ببریم.
      پاسخ دادن
  15. حیدر

        خوب چجوری شروع کنیم؟

    پاسخ دادن
  16. حسین جهان بین

    با سلام و احترام خدمت اساتید بزرگوار 

    از اونجایی که بحث استفاده از EF یا Ado.net خیلی توسط دوستان دنبال میشه گفتم از تجربه عملی خودم در مورد استفاده از این دو تکنولوژی بگم. 
    1 – تکنولوژی EF نهایتا به Ado.net تبدیل میشه لذا سرعت واکشی یا ثبت اطلاعات در دیتابیس بیشتر از Ado.net نیست . (به شرط نوشتن Query های بهینه در SQL ). 
    2 – تکنولوژی EF برای پروژه هایی در سطح کوچک یا متوسط که تغییرات در دیتابیس زیاد نیست خیلی خوبه و سرعت Develop رو بالا میبره . ولی برای پروژه های بزرگ یا پروژه هایی که ساختار دیتابیس در اونها دائما در حال تغییره خوب نیست . چون همیشه باید اون رو تغییر بدین . 
    3 – در پروژه هایی که نیاز به جداول بدون کلید اصلی هست EF جواب نمیده . 
    4 – اگر جدول یا جداولی دارین که فیلد کلید اصلی اون از نوع  NVarcher هست EF جواب نمیده . 
    5 – خیلی از ابزارهای دیگه مانند گزارش سازها و … هنوز از Ado.net استفاده می کنن و نهایتا باید خروجی گزارش ها تون رو با SQL Query بنویسین . 
    6 – EF در استفاده از Stored Procedure ها مشکلی نداره ولی اگر SP ها رو تغییر بدین و EF بخواد اونها رو بروزرسانی کنه خیلی مشکل داره . 
    7 – در برنامه هایی که از چند دیتابیس استفاده می کنن توصیه نمی کنم . مدیریت دیتابیس خیلی سخت میشه . 
    8 – ارسال Connection String به صورت Dynamic کمی سخت انجام میشه و باید یک تابع دستی خودتون در ساختار EF ایجاد کنین که با Refresh کردن ساختار این تابع حذف میشه و دوباره باید اون رو ایجاد کنین . 
    ** در کل استفاده از EF رو فقط برای پروژه های کوچک و یک دیتابیس که تغییرات جداول خیلی کم هست و دیتابیس از قبل طراحی شده توصیه می کنم.
    اساتیدی که وقت کافی برای تولید یک Frame Work شخصی برای برنامه دارن بهتره از Ado.net استفاده کنن  و با استفاده از کلاس ها از تکرار دستورات Ado.net کم کنن . (EF هم پشت صحنه داره همین کار رو میکنه)
    از اینکه طولانی شد از اساتید عذرخواهی می کنم . 
    پاسخ دادن
  17. مجید

    سلام جناب آقای ارومند
    وقت تون بخیر
    از مطالب ارزشمندتون کمال سپاس را دارم

    شما در Microsoft Build 2018 فرمودید که از Lazy Loading استفاده نکنیم چون نشتی دارد
    سوال مهمی که دارم این است که در بحث MVC و استفاده از پترن Repository و UnitOfWork باید چکار کرد یا چگونه انجام داد؟

    پاسخ دادن
    1. آرزو محمدزاده

      آرزو محمدزاده

      با سلام و عرض ادب

      سوال شما کمی نامفهون است اما استفاده از lazy loading یک ابزار است و repositoryو uow دو الگو که هیچ ارتباطی بین این ها وجود ندارد
      در مورد چگونگی پیاده سازی این الگو ها در mvcهم روش های خیلی زیادی وجود داره که در دوره Modern Data Layer به آن اشاره شده است شما می توانید سرفصل های این دوره را از لینک زیر مشاهده نمایید.

      https://nikamooz.com/product/modern-data-layer/

      پاسخ دادن

ارسال نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

تمامی حقوق مادی و معنوی این وب سایت متعلق به نیک آموز می باشد.
این سایت توسط تیم آموزش برنامه نویسی نیک آموز مدیریت می شود.

دانلود فیلم‌ وبینارهای نوروزی نیک آموز | دانلود کنید، تماشا کنید، لذت ببرید
دانلود تمام فیلم ها بصورت رایگان
close-image