
آموزش نکات طلایی Entity Framework برای نرم افزارهای تجاری سری اول
آموزش نکات طلایی Entity Framework برای نرم افزارهای تجاری سری اول یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی Entity Framework در برنامه های تجاری است که با نام اصلی Entity Framework in the Enterprise از شرکت Pluralsight منتشر شده است.
Entity Framework چیست؟
Entity Framework یک object-relational mapper که به برنامه نویسان دات نت این امکان را می دهد که با داده های بانک های اطلاعاتی در قالب Object های محیط شی گرا کار کنند. به عبارت دیگر، دیگر نیازی به نوشتن کدهای دسترسی به داده ها که در ADO.NET نوشته می شوند نیست. قدرت بسیار بالای Entity Framework در انجام وظایف اولیه شبیه عملیات CRUD، استفاده از LINQ، استفاده از Stored Procedure ها، استفاده از View ها، TVF ها، در دسترس بودن Entity SQL و … از ویژگی هایی ست که این تکنولوژی بسیار قدرتمند در اختیار توسعه دهندگان نرم افزار قرار می دهد.
Enterprise Application چیست؟
یک Enterprise Application یک سیستم نرم افزاری بسیار بزرگ و پیچیده است که به منظور استفاده شدن در محیط های تجاری از قبیل کسب و کار ها و سازمان های دولتی طراحی شده است. بعضی از ویژگی های Enterprise Application پیچیدگی آنها مقیاس پذیری مبتنی بر کامپوننت بودن توزیع شده و mission critical بودن آنها می باشد. یک Enterprise Application مجموعه ای از گروهی از نرم افزارها است که همگی مدل سازمانی (Organizational Model) و کاربردهای تجاری (Business Application) یکسانی را دارد و به منظور استفاده شدن در شرایط غیر موازی طراحی شده اند. در توسعه Enterprise Application ها از Enterprise Architecture ها استفاده می شود. بعضی از مثال های Enterprise Application ها عبارت اند از: سیستم های خرید آنلاین سیستم های پردازش پرداخت سیستم های کاتالوگ محصولات سیستم های صدور قبض کامپیوتری سیستم های امنیتی سیستم های مدیریت محتوا سیستم های مدیریت سرویسهای IT و غیره.
طراحی Data Layer با Entity Framework در نرم افزارهای تجاری
Data Layer بخشی از معماری نرمافزار است که مسئولیت ارتباط با منابع داده و مدیریت عملیات ذخیرهسازی و بازیابی اطلاعات را بر عهده دارد. در برنامههای تجاری، طراحی مناسب این لایه اهمیت زیادی دارد، زیرا منطق دسترسی به دادهها در بخشهای مختلف سیستم مورد استفاده قرار میگیرد. Entity Framework به توسعهدهندگان .NET اجازه میدهد دادههای پایگاه داده را از طریق مدلهای شیگرا مدیریت کنند و بسیاری از جزئیات نگاشت میان اشیا و دادههای رابطهای را به این ابزار واگذار کنند.
هنگام طراحی Data Layer باید مشخص شود مسئولیت دسترسی به دادهها در کدام بخش قرار میگیرد و سایر اجزای برنامه چگونه با آن ارتباط برقرار میکنند. جدا کردن این مسئولیت از منطق کسبوکار میتواند تغییرات و تست کردن برنامه را سادهتر کند. همچنین ساختار مناسب این لایه از پراکندگی کدهای مربوط به پایگاه داده جلوگیری میکند. در پروژههای بزرگ، این تصمیمهای معماری اهمیت بیشتری پیدا میکنند، زیرا تغییرات در مدل داده یا شیوه ذخیرهسازی ممکن است بخشهای متعددی از نرمافزار را تحت تأثیر قرار دهند.
الگوی Repository و Unit of Work در Entity Framework
Repository الگویی برای سازماندهی دسترسی به دادههاست که جزئیات بازیابی و ذخیرهسازی را از منطق مصرفکننده جدا میکند. به کمک این الگو، بخشهای مختلف برنامه میتوانند بهجای درگیر شدن مستقیم با جزئیات پایگاه داده، از یک رابط مشخص برای دریافت یا تغییر اطلاعات استفاده کنند. با این حال، Entity Framework خود قابلیتهایی برای کار با دادهها ارائه میدهد و استفاده از Repository همیشه ضروری نیست. تصمیمگیری درباره بهکارگیری این الگو باید با توجه به نیازهای معماری و پیچیدگی پروژه انجام شود.

Unit of Work نیز الگویی برای هماهنگ کردن مجموعهای از تغییرات مرتبط در یک واحد کاری است. در Entity Framework، نمونه DbContext تغییرات موجودیتها را پیگیری میکند و میتواند آنها را از طریق فراخوانی SaveChanges ذخیره کند. به همین دلیل، افزودن یک لایه جداگانه برای Unit of Work باید با دقت انجام شود تا قابلیتهای موجود بدون دلیل تکرار نشوند. شناخت ارتباط میان این الگوها و امکانات Entity Framework به توسعهدهندگان کمک میکند ساختاری متناسب با نیاز پروژه طراحی کنند.
چگونه Entity Framework را در پروژه های بزرگ تست کنیم؟
تست کردن برنامههایی که با Entity Framework کار میکنند، نیازمند توجه به تفاوت میان منطق کسبوکار و رفتار واقعی لایه دسترسی به داده است. بخشهایی از برنامه را میتوان با جدا کردن وابستگیها بهصورت مستقل آزمایش کرد، اما برخی رفتارها مانند اجرای Queryها و تعامل با پایگاه داده به محیطی نزدیکتر به شرایط واقعی نیاز دارند. انتخاب روش تست به نوع اطمینانی بستگی دارد که انتظار داریم به دست آوریم و باید با ساختار Data Layer هماهنگ باشد.
در طراحی تستهای نرمافزار، بهتر است مشخص شود کدام بخشها به تست واحد و کدام بخشها به تست یکپارچه نیاز دارند. تست واحد میتواند رفتار منطق برنامه را در شرایط کنترلشده بررسی کند، در حالی که تست یکپارچه برای ارزیابی تعامل میان اجزای واقعی سیستم مناسب است. استفاده از پایگاه داده آزمایشی یا محیط تست متناسب با پروژه نیز میتواند به بررسی رفتار دسترسی به داده کمک کند. این تفکیک باعث میشود مشکلات مربوط به منطق برنامه از ایرادهای ناشی از تعامل با زیرساخت آسانتر تشخیص داده شوند.
مدیریت DbContext در معماری برنامه های تجاری
DbContext یکی از اجزای اصلی Entity Framework است که ارتباط میان برنامه و مدل داده را مدیریت میکند. این کلاس امکان پرسوجو از دادهها، پیگیری تغییرات موجودیتها و ذخیرهسازی آنها را فراهم میکند. در پروژههای تجاری، نحوه استفاده از DbContext اهمیت زیادی دارد، زیرا طول عمر نمونهها و محدوده مسئولیت آنها بر مدیریت حافظه، سازگاری تغییرات و رفتار برنامه تأثیر میگذارد. استفاده از نمونههای مناسب و پرهیز از اشتراکگذاری نامناسب آنها، بخشی از طراحی صحیح لایه دسترسی به داده است.

در طراحی برنامههای بزرگ، لازم است محدوده هر DbContext با مسئولیتهای مشخصی از سیستم هماهنگ باشد. نگهداری یک Context برای مدت طولانی یا استفاده همزمان و نامناسب از یک نمونه در چند عملیات میتواند مشکلاتی در پیگیری تغییرات و مدیریت منابع ایجاد کند. همچنین جداسازی منطق دامنه از جزئیات DbContext به انعطافپذیری معماری کمک میکند. بررسی این مسائل برای توسعهدهندگانی که از Entity Framework در برنامههای تجاری استفاده میکنند، به ساخت Data Layer قابل نگهداریتر منجر میشود.
سرفصل مطالب آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری
فصل اول: معماری Data Layer
- مقدمه
- اهداف این فصل
- روند آموزشی در این بسته ی آموزشی
- مسائل بنیادی معماری نرم افزار در استفاده از Entity Framework
- قبل و بعد از افزودن یک Repository ساده
- جایگاه LINQ Query ها کجاست؟
- استفاده از Automated Testing در کنار Entity Framework
- ساخت Context های کوچکتر بر اساس الگوی Bounded Context در Domain Driven Design
- جمع بندی
- منابع
فصل دوم: کار با Bounded DbContext
- مقدمه
- اهداف این فصل
- Domain Driven Design چیست؟
- Bounded Context چیست؟
- مدل کردن Bounded Context در Entity Framework
- ساخت تعریف های مختلف از یک Domain Class یکسان
- مرتبط کردن تمامی Context ها به یک بانک اطلاعاتی یکسان
- بررسی کردن روشی که کدنویس ها با Type های Context های شما رفتار می کنند
- فهمیدن و کنترل کردن چیزهایی که در یک Model قرار می گیرند
- جابجا کردن Object ها بین Context های مختلف
- Database Mapping های Type ها در Context های مختلف
- Database Initialization با Context های مختلف
- Model Visualization و Reverse Engineering (مهندسی معکوس) کردن یک دیتابیس با Entity Framework
- جمع بندی
- منابع
فصل سوم: کار با Repository و Unit of Work
- مقدمه
- اهداف این فصل
- بررسی Repository
- استفاده از یک Template (الگو) برای ساختن اولین Repository
- تست کردن Repository ساخته شده
- ساخت یک Interface جنریک برای Repository
- کار کردن با Object Graph ها در برنامه های Disconnected
- آماده کردن Repository برای Object Graph های Disconnected
- تعیین کردن State مربوط به Disconnected Entity ها
- الگوهای کسب موفقیت در Attach کردن Object Graph ها
- پیاده سازی Unit of Work
- یکپارچه کردن Repository ها و Unit of Work با Bounded Context ها
- مسائل مهم دیگر در ساخت Repository ها در کنار Entity Framework
- جمع بندی
- منابع
فصل چهارم: کار با Automated Testing
- مقدمه
- اهداف این فصل
- بررسی Automated Testing
- انجام Interaction Testing با دیتابیس
- انجام Integration Testing با API مربوط به Entity Framework
- چرا باید از Fake ها در انجام Unit Testing در کنار Entity Framework استفاده کرد؟
- پیاده سازی Fake DbSet ها
- بررسی Abstract کردن Context
- Abstract کردن Context مرحله ی اول
- بررسی Abstract کردن Context مرحله ی دوم - برای Unit of Work
- ریفکتور کردن برای رسیدن به یک کلاس Unit of Work تک
- انجام تست ها با Fake ها و معماری جدید
- استفاده از داده های Fake در Unit Testing
- استفاده از این معماری جدید در یک برنامه ی MVC
- جمع بندی
- منابع







