نظرات مطالب
کاربردهای Static reflection - قسمت اول
- یک بررسی علمی (بدون علامت تعجب احساسی در انتهای جمله) اینجا هست: (+)
در «یک میلیون بار» اجرا، حدودا 10 ثانیه تفاوت اجرا است نسبت به حالت بکارگیری رشتهها.
البته شما در عمل، نه در محیط آزمایشگاهی، پیدا کنید برنامهای را که یک میلیون بار بخواهد خواصی را مرتبا به روز کند.
- زمانیکه LINQ هم ارائه شد، اولین مقالاتی که در این مورد ... در مورد نقد آن منتشر شد، تمرکز را گذاشتند روی کارآیی؛ که این کمی کند است! البته الان کمتر کسی است که در پروژههایش حداقل از LINQ to Objects استفاده نکند. به این دلایل:
- هدف استفاده از LINQ اصلا مسابقهی سرعت نیست.
- هدف تولید کدهای Strongly typed که این اهمیتها را دارند: تحت نظر کامپایلر هستند، قابلیت refactoring دارند و intellisense خودکاری را به همراه خواهند داشت. تمام اینها نگهداری یک پروژه را (که اصل زمان اختصاص داده شده به توسعه یک نرم افزار هم همین قسمت نگهداری است)، سادهتر و قابل تحملتر میکند.
- کاهش حجم کدهای نوشته شده. شما میتونید حجم بالایی از if-else و for و حلقهها و غیره رو با یک سطر LINQ نمایش بدید. این هم در بالابردن خوانایی و همچنین نگهداری سادهتر برنامه مؤثر است.
- تبدیل سادهتر اطلاعات خام به اشیاء (LINQ to xyz ها)
و ...
شما خیلی از مزایا رو بدست خواهید آورد اما خوب مسلما اینها هزینه هم دارند. اما نه آنچنان که کسی بخواهد از آنها صرفنظر کند.
در «یک میلیون بار» اجرا، حدودا 10 ثانیه تفاوت اجرا است نسبت به حالت بکارگیری رشتهها.
البته شما در عمل، نه در محیط آزمایشگاهی، پیدا کنید برنامهای را که یک میلیون بار بخواهد خواصی را مرتبا به روز کند.
- زمانیکه LINQ هم ارائه شد، اولین مقالاتی که در این مورد ... در مورد نقد آن منتشر شد، تمرکز را گذاشتند روی کارآیی؛ که این کمی کند است! البته الان کمتر کسی است که در پروژههایش حداقل از LINQ to Objects استفاده نکند. به این دلایل:
- هدف استفاده از LINQ اصلا مسابقهی سرعت نیست.
- هدف تولید کدهای Strongly typed که این اهمیتها را دارند: تحت نظر کامپایلر هستند، قابلیت refactoring دارند و intellisense خودکاری را به همراه خواهند داشت. تمام اینها نگهداری یک پروژه را (که اصل زمان اختصاص داده شده به توسعه یک نرم افزار هم همین قسمت نگهداری است)، سادهتر و قابل تحملتر میکند.
- کاهش حجم کدهای نوشته شده. شما میتونید حجم بالایی از if-else و for و حلقهها و غیره رو با یک سطر LINQ نمایش بدید. این هم در بالابردن خوانایی و همچنین نگهداری سادهتر برنامه مؤثر است.
- تبدیل سادهتر اطلاعات خام به اشیاء (LINQ to xyz ها)
و ...
شما خیلی از مزایا رو بدست خواهید آورد اما خوب مسلما اینها هزینه هم دارند. اما نه آنچنان که کسی بخواهد از آنها صرفنظر کند.
نظرات مطالب
MVC vs 3-Tier Pattern
همون لایه UI هم نیاز به جداسازی کدهای نمایشی از کدهای مدیریت کننده آن برای بالابردن امکان آزمایش کردن و یا حتی استفاده مجدد قسمتهای مختلف اون داره. در این حالت شما راحت نمیتونید MVC و Web forms رو در یک سطح قرار بدی (که اگر اینطور بود اصلا نیازی به MVC نبود؛ نیازی به MVVM برای سیلورلایت یا WPF نبود و یا نیازی به MVP برای WinForms یا Web forms نبود).
نظرات اشتراکها
#C برای برنامه نویسی سیستمی
نسخه native، منظور کامپایل مستقیم کدهای سیشارپ به کدهای ماشین هستند. در حال حاضر اگر صحبت از #C میشود، منظور #CLR C است. یعنی کدهای شما ابتدا به IL ترجمه میشوند و بعد IL توسط JIT Compiler به کدهای ماشین ترجمه خواهد شد. در نسخه native این دو مرحله حذف و تبدیل به یک مرحله خواهند شد. البته برای مقاصد سیستمی جهت دسترسی بیشتر به سخت افزار و همچنین بالابردن سرعت اجرایی کدها. برای رقابت با ++C با ارائه زبانی که type safe است؛ برای کارهای async بهینه سازی شدهاست، سرعت توسعه با آن بالاتر است و ابزارهای بهتری برای آن تدارک دیده شدهاند. ضمنا استاندارد آن در اختیار مایکروسافت است و تغییرات آتی آن سادهتر خواهند بود و سریعتر.
مسیرراهها
Entity framework code-first
شروع به کار با EF Code first
برای تکمیل بحث نیاز است تغییرات انجام شده از نگارش 4 به 6 را نیز مد نظر داشته باشید:
آشنایی با مباحث Migrations
آشنایی با تنظیمات نگاشتها به دو روش استفاده از ویژگیها و Fluent API
اعتبارسنجی و بررسی استثناءها
ردیابی تغییرات
استفاده از SQL خام و بانکهای اطلاعاتی متفاوت
نکات مهم کوئری نویسی در EF
استفاده از EF در WPF
لایه بندی پروژههای EF Code first
پروژههای انجام شده با EF Code first
برای تکمیل بحث نیاز است تغییرات انجام شده از نگارش 4 به 6 را نیز مد نظر داشته باشید:
- ارتقاء به Entity framework 6 و استفاده از بانکهای اطلاعاتی غیر از SQL Server
- بروز رسانی استفاده از SqlServer Compact در Entityframework 6.0
آشنایی با مباحث Migrations
- آشنایی با Code first migrations : قسمت اول و دوم
- وادار کردن EF Code first به ساخت بانک اطلاعاتی پیش از شروع به کار برنامه
- بررسی خطاهای متداول عملیات Migration در حین به روز رسانی پروژههای EF Code First
- بازسازی جدول MigrationHistory با کد نویسی در EF Code first
- استفاده از چندین Context در EF 6 Code first
آشنایی با تنظیمات نگاشتها به دو روش استفاده از ویژگیها و Fluent API
- امکانات مهیا جهت تنظیم ویژگیهای مدلهای برنامه در EF Code first
- تعیین شمای جداول بانکی در EF Code First
- بررسی تعاریف نگاشتها به کمک متادیتا در EF Code first
- بررسی Fluent API جهت تعریف نگاشت کلاسها به بانک اطلاعاتی
- مدیریت روابط بین جداول در EF Code first به کمک Fluent API
- ادامه بحث بررسی جزئیات نحوه نگاشت کلاسها به جداول، توسط EF Code firs
- SQL Server CE و ثبت متون طولانی در EF Code first
- بازنویسی سادهتر پیش فرضهای EF Code first در نگارش 6 آن
- مباحث تکمیلی مدلهای خود ارجاع دهنده در EF Code first
- بررسی تفصیلی رابطه Many-to-Many در EF Code first
- تقسیم جدول در Entity Framework Code First
- کار با کلیدهای اصلی و خارجی در EF Code first
- تنظیمات ارث بری کلاسها در EF Code first
- ایندکس منحصر به فرد با استفاده از Data Annotation در EF Code First
- ایجاد ایندکس منحصربفرد در EF Code first به صورت Fluent API
- افزودن خودکار کلاسهای تنظیمات نگاشتها در EF Code first
- خودکار کردن تعاریف DbSetها در EF Code first
- بررسی خطای cycles or multiple cascade paths و یا cyclical reference در EF Code first
- بالا بردن سرعت بارگذاری اولیه EF Code first با تعداد مدلهای زیاد
اعتبارسنجی و بررسی استثناءها
- Entity Framework و InnerException
- استثناهایی که باید حین استفاده از EF Code first بررسی شوند
- اعتبارسنجی در Entity framework Code first
ردیابی تغییرات
- ردیابی تغییرات در EF Code first
- ردیابی تغییرات در Entity Framework، بخش اول
- چند نکته کاربردی درباره Entity Framework
- نمایش خروجی SQL کدهای Entity framework 6 در کنسول دیباگ ویژوال استودیو
- بالا بردن سرعت DbContext هنگام ثبت دادههای زیاد
- استفاده از EF در اپلیکیشنهای N-Tier : قسمت اول
- نحوه کاهش مصرف حافظه EF Code first حین گزارشگیری از اطلاعات
استفاده از SQL خام و بانکهای اطلاعاتی متفاوت
نکات مهم کوئری نویسی در EF
- نوشتن پرس و جو در Entity Framework با استفاده از LINQ To Entity ، قسمت اول، دوم و سوم
- تفاوت بین IQueryable و IEnumerable در حین کار با ORMs
- Lazy loading و eager loading
- روشهایی برای بهبود سرعت برنامههای مبتنی بر Entity framework
- نکاتی در مورد استفاده از توابع تجمعی در Entity framework
- کوئریهایی با قابلیت استفادهی مجدد
- شبیه سازی outer Join در entity framework
- اعمال توابع تجمعی بر روی چند ستون در Entity framework
- متد LastOrDefault در EF
- Func یا Expression Func در EF
- درج یک باره چندین رکورد بصورت همزمان هنگام استفاده از ORMها
- استفاده از خواص راهبری در Entity framework بجای Join نویسی
- مرتب سازی رکوردها به صورت اتفاقی در Entity framework
- استفاده از خواص راهبری در EF Code first جهت ساده سازی کوئریها
- یافتن مقادیر نال در Entity framework
- واکشی اطلاعات به صورت chunk chunk (تکه تکه) و نمایش در ListView
- امنیت در LINQ to SQL
- کارهایی جهت بالابردن کارآیی - قسمت اول
- کارهایی جهت بالابردن کارآیی - قسمت دوم
- کارهایی جهت بالابردن کارآیی - قسمت سوم
استفاده از EF در WPF
لایه بندی پروژههای EF Code first
- پیشنیاز: مطالعه کامل دوره تزریق وابستگیها
- استفاده از الگوی Repository اضافی در EF Code first؛ آری یا خیر؟!
- Repositoryها روی UnitOfWork ایده خوبی نیستند
- پیاده سازی الگوی Context Per Request در برنامههای مبتنی بر EF Code first
- پیاده سازی UnitOfWork به وسیله MEF
پروژههای انجام شده با EF Code first