
آموزش نکات طلایی Entity Framework برای نرم افزارهای تجاری سری دوم
آموزش نکات طلایی Entity Framework برای نرم افزارهای تجاری سری اول سری دوم یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی Entity Framework در برنامه های تجاری سری دوم است که با نام اصلی Entity Framework in the Enterprise Updated از شرکت 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 و غیره.
Encapsulation در Entity Framework و تأثیر آن بر طراحی نرم افزار
Encapsulation یا کپسولهسازی یکی از مفاهیم مهم برنامهنویسی شیگراست که با محدود کردن دسترسی مستقیم به جزئیات داخلی اشیا، امکان کنترل بهتر رفتار آنها را فراهم میکند. در مدلهای مبتنی بر Entity Framework، این مفهوم به نحوه تعریف موجودیتها، ویژگیها و عملیات تغییر وضعیت آنها ارتباط دارد. اگر تمام دادههای یک موجودیت بدون محدودیت در دسترس باشند، ممکن است قوانین کسبوکار بهسادگی دور زده شوند. طراحی مناسب باید میان دسترسی مورد نیاز Entity Framework و حفظ یکپارچگی مدل دامنه تعادل برقرار کند.

کپسولهسازی مؤثر به این معناست که تغییر وضعیت موجودیتها تا حد امکان از مسیرهایی انجام شود که قواعد مورد انتظار را حفظ میکنند. برای مثال، بهجای اینکه بخشهای مختلف برنامه مستقیماً ویژگیهای مرتبط را تغییر دهند، میتوان رفتارهای مشخصی در مدل تعریف کرد. البته جزئیات پیادهسازی به نسخه Entity Framework و نیازهای مدل بستگی دارند. درک این موضوع به توسعهدهندگان کمک میکند مدلی طراحی کنند که هم با ابزار دسترسی به داده سازگار باشد و هم مسئولیت اجرای قواعد دامنه را بهدرستی حفظ کند.
مدیریت Domain Model و Data Model در سیستم های پیچیده
Domain Model مفاهیم و قواعد اصلی کسبوکار را نمایش میدهد، در حالی که Data Model ساختار مورد استفاده برای نگهداری و سازماندهی دادهها را توصیف میکند. این دو مدل میتوانند ارتباط نزدیکی داشته باشند، اما لزوماً یکسان نیستند. در نرمافزارهای تجاری پیچیده، یکسان فرض کردن نیازهای دامنه و محدودیتهای ذخیرهسازی ممکن است باعث شود مدل کسبوکار به جزئیات پایگاه داده وابسته شود. تفکیک آگاهانه این مسئولیتها به طراحی انعطافپذیرتر سیستم کمک میکند.
Entity Framework امکان نگاشت میان مدلهای شیگرا و ساختار دادههای رابطهای را فراهم میکند، اما نحوه تعریف این نگاشتها همچنان به تصمیمهای طراحی نیاز دارد. در بعضی پروژهها، مدل موجودیتها میتواند به ساختار ذخیرهسازی نزدیک باشد؛ در پروژههای دیگر، جداسازی بیشتر مدل دامنه از مدل داده مناسبتر است. انتخاب روش درست به پیچیدگی قواعد کسبوکار و نیازهای برنامه بستگی دارد. شناخت این تفاوتها به توسعهدهندگان کمک میکند از تحمیل محدودیتهای پایگاه داده به منطق اصلی سیستم جلوگیری کنند.
Bounded Context و مدیریت State در Entity Framework
Bounded Context در طراحی دامنه محور، محدودهای مشخص برای تعریف و استفاده از یک مدل دامنه است. در سیستمهای بزرگ، بخشهای مختلف کسبوکار ممکن است مفاهیم مشترکی مانند مشتری یا سفارش را با قواعد متفاوتی به کار ببرند. تعیین مرزهای مناسب برای این بخشها کمک میکند مدلها مستقلتر باقی بمانند و تغییرات یک حوزه، بهصورت غیرضروری سایر حوزهها را تحت تأثیر قرار ندهد. در معماری داده نیز میتوان با توجه به همین مرزبندیها، مسئولیت و محدوده هر DbContext را مشخص کرد.

یکی دیگر از مسائل مهم در Entity Framework، مدیریت State موجودیتهاست؛ بهویژه زمانی که Object Graph پس از ارسال به یک کلاینت یا عبور از یک فرایند دیگر دوباره به برنامه بازمیگردد. در چنین شرایطی، Context ممکن است اطلاعاتی درباره تغییرات قبلی اشیا نداشته باشد و لازم باشد وضعیت موجودیتها بهدرستی مشخص شود. مدیریت صحیح این وضعیت برای جلوگیری از ثبت تغییرات ناخواسته و ایجاد تعارض اهمیت دارد. درک ارتباط میان مرزهای دامنه، DbContext و State موجودیتها به طراحی دقیقتر لایه داده کمک میکند.
نگاشت Domain Model با Entity Framework و تست کردن آن
نگاشت Domain Model به ساختار پایگاه داده یکی از مسئولیتهای مهم در توسعه نرمافزارهای مبتنی بر Entity Framework است. این فرایند مشخص میکند ویژگیها و ارتباطات موجودیتهای برنامه چگونه در ساختار ذخیرهسازی بازتاب پیدا کنند. اگر مدل دامنه شامل قواعد و رفتارهای پیچیده باشد، لازم است نگاشتها بهگونهای طراحی شوند که این ساختار را پشتیبانی کنند، بدون اینکه جزئیات فنی پایگاه داده بیش از اندازه وارد منطق کسبوکار شوند. انتخاب روش مناسب نگاشت به نیازهای مدل و نسخه Entity Framework وابسته است.
تست کردن برنامه در کنار Entity Framework به بررسی هم منطق برنامه و هم تعامل آن با لایه داده کمک میکند. برای این منظور، باید تفاوت تست رفتار دامنه با تست عملیات واقعی پایگاه داده در نظر گرفته شود. تستهای مستقل میتوانند قواعد و رفتارهای مدل را بررسی کنند، در حالی که تستهای یکپارچه برای اطمینان از عملکرد نگاشتها و عملیات ذخیرهسازی کاربرد دارند. توجه به این تفکیک، شناسایی خطاهای مرتبط با مدل و پایگاه داده را آسانتر میکند و در فرایند ریفکتورینگ نیز اطمینان بیشتری ایجاد میکند.
سرفصل مطالب آموزش ویدئویی نکات طلایی Entity Framework برای برنامه های تجاری سری دوم
فصل اول: مقدمه ی بسته ی آموزشی
- مقدمه ی بسته ی آموزشی
فصل دوم: معماری کردن یک Data Layer
- مقدمه
- پیش نیازهای این بسته ی آموزشی
- مقدمه ی بسته ی آموزشی و فصل
- به Demoware نه بگویید
- ردپای معماری: نقطه ی شروع
- مزایا و معایب استفاده کردن از Demoware
- اولین مرحله شکستن یک Solution تک پروژه ای
- حذف کردن Entity Framework از UI
- درس هایی از Bounded Context و دیگر الگوهای Domain Driven Design
- انجام Testing با حضور Entity Framework 6
- جمع بندی
- منابع
فصل سوم: درک کردن Encapsulation در Entity Framework و اختلاف نظرها در استفاده از Repository
- مقدمه
- دید کلی
- مزایای Encapsulate کردن کدهای Entity Framework
- بررسی Reusable Component ها و Separation of Concerns
- DbSet یک Repository است
- راهنمایی در مورد استفاده کردن از Repository ها یا Explicit Class ها
- آیا باید IQueryable را Return کنیم یا IEnumerable؟
- جمع بندی
- منابع
فصل چهارم: پیاده سازی الگوهای Encapsulation در Entity Framework
- مقدمه
- دید کلی
- پیاده سازی یک Generic Repository
- گزینه های Non-tracking برای متد جنریک FindByKey
- اضافه کردن Eager Loading به Generic Repository
- مزیت های Dependency Injection و Inversion of Control
- پیاده سازی یک IoC Container در برنامه
- Customized Encapsulation برای Complex Behavior ها
- پیاده سازی Persistence سازی Shopping Cart
- بررسی عملی حرکت از Controller به سرویس و سپس به Data Class
- جمع بندی
فصل پنجم: مدیریت کردن Domain ها و Data Model های پیچیده
- مقدمه
- دید کلی
- معرفی Domain Driven Design و Bounded Context های آن
- رابطه ی DbContext در Entity Framework و Bounded Context در Domain Driven Design
- ریفکتور کردن Solution به Bounded Context
- بررسی دقیق تر Solution ریفکتور شده
- مزایا و معایب مربوط به روش Reverse Engineering از یک دیتابیس موجود
- ساختن Migration ها برای چندین DbContext
- پیاده سازی یک Code First Migration برای Maintenance DbContext
- DbContext Migration های بیشتر و یک View در همان دیتابیس
- جمع بندی
فصل ششم: انجام عملی ریفکتورینگ برای ساخت Bounded Context ها
- مقدمه
- دید کلی
- ریفکتور کردن Maintenance Domain و Data Layer و تست ها
- ریفکتور کردن Shopping Cart Bounded Context و Data Layer
- ریفکتور کردن Shopping Cart
- تست کردن Integration Test ها پس از ریفکتورینگ
- به روز رسانی کردن وبسایت
- بازبینی ریفکتورینگ
- منابع
فصل هفتم: مدیریت کردن State مربوط به Object Graph های Disconnected
- مقدمه
- چالش مربوط به Disconnected Graph ها چیست
- به روز رسانی کردن Shopping Cart Graph
- آگاه کردن Entity Framework از تغییرات Graph: دید کلی
- آگاه کردن Entity Framework از تغییرات Graph: کد
- جمع نبدی
- منابع
فصل هشتم: Map کردن Domain Model ها با Entity Framework
- مقدمه
- دید کلی
- آیا باید مستقیماْ از Domain عملیات Persistence سازی را انجام داد
- Rich Domain Model ها و Anemic Domain Model ها
- بررسی Setter های Private و Constructor های Private
- سناریوهایی که در آنها Entity Framework نمی تواند Private Setter ها را هندل کند
- Domain Driven Design توصیه به پیاده سازی One Way Navigation می کند
- بررسی Domain Driven Design و Entity Framework و Relationship های Many-to-Many
- سناریوهایی که در آنها Entity Framework نیاز به Bi-directional Navigation دارد
- Domain Driven Design توصیه به Value Object ها به جای Relationship های One-to-One می کند
- بررسی اینکه Entity Framework چگونه با Value Object ها کار می کند
- توصیه های نهایی درباره ی Domain Driven Design و Entity Framework
- بررسی کردن الگوی CQRS و Data Model های Entity Framework
- جمع بندی
- منابع
فصل نهم: تست کردن برنامه در زمان استفاده از Entity Framework
- مقدمه
- دید کلی
- Mocking چیست و چرا باید از آن در تست ها استفاده کرد
- برنامه ریزی در مورد اینکه چه چیزی را باید Mock کرد
- تبدیل کردن تست اول برای Mock کردن کد مربوط به Entity Framework
- Reusable کردن Mocked DbSet
- Mock کردن Query های Entity Framework
- Mock کردن دستور Include در Entity Framework
- Mock کردن متدهای Asynchronous در Entity Framework
- جلوگیری کردن از تله ی Mock کردن همه چیز
- ریفکتور کردن تست ها بر اساس وظایف دیتابیس ها
- جمع بندی
- منابع







