"> الگوی طراحی Repository در NET Core. | آموزش .NET Cre | ام اس پی سافت

الگوی طراحی Repository در NET Core.

الگوی طراحی

در این مقاله، میخواهیم راجب الگوی طراحی Repository در NET Core. صحبت کنیم. ما نحوه ی سازمان بندی پروژه ی خود را در یک الگوی طراحی توضیح خواهیم داد.

مزایای اصلی بکارگیری الگوی طراحی، حفظ اتصال سست ماژول ها و کمک به توسعه دهندگان در آدرس دهی درخواست های تغییر با کمترین تغییرات در کد می باشند.

همچنین، ماژول ها می توانند در چندین پروژه مورد استفاده ی مجدد قرار بگیرند، که این امر توسعه را سرعت می بخشد.

الگوهای طراحی بسیاری وجود دارد، و یک مزیت استفاده از الگوی طراحی Repository ، متمرکز نگه داشتن منطبق دسترسی به داده ها است.

الگوی طراحی Repository

در ابتدا، با فهم این موضوع که چرا به AutoMapper نیاز داریم و نیز نحوه ی پیکربندی تزریقات وابستگی در .NET Core درگیر بودیم.

می دانم که مقالات بسیاری در رابطه با این موضوع وجود دارد، اما ممکن است پاسخگوی تمامی سوالات و نیازهای شما نباشد.

در این مقاله، جریان داده را توضیح خواهیم داد تا شما نیز بتوانید آن را درک کنید.

Solution Explorer

 ایجاد یک New API Project در VS

در Visual Studio، بر روی File کلیک کرده، به New بروید، و قالب پروژه ی مناسب را انتخاب کنید.

 Create a New API Project in VS

بر روی OK کلیک کنید.

این کار، یک کادر محاوره ای جدید باز خواهد کرد.

API را انتخاب کرده و برای زمان حال، تیک گزینه ی “configure HTTPS” را بردارید. بر روی OK کلیک کنید.

Web Application

پروژه و ساختاری مشابه زیر ایجاد خواهد کرد.

Csharp Corner Demo

 ایجاد یک New Class Library Project برای Data

بر روی solution خود راست کلیک کنید. به Add رفته، و New Project را انتخاب کنید.

Create a New Class Library Project for Data

Class Library Project را انتخاب کرده و OK را کلیک کنید.

Class Library Project

سپس، یک پایگاه داده در SQL Server ایجاد کرده و یک جدول تست با چند ستون همانطور که در ادامه نشان داده شده ایجاد کنید.

Object Explorer

نحوه ی متصل کردن SQL DB با .NET Core Application خود

پس از آن، نیاز است پایگاه داده ی SQL را از طریق اجرای یک فرمان، چارچوب بندی کنیم.

بر روی Tools کلیک کرده، به NuGet Package Manager بروید، و Package Manager Console را انتخاب کنید.

فرمان زیر را اجرا کنید. پیش از اجرای این فرمان، مطمئن شوید که “Data Class Library Project” را از منوی آبشاری بالای package manager console انتخاب کرده اید.

Scaffold-DbContext "Server=tcp:xxxxxserver.database.windows.net;Database=xxxx_dev;User Id=xxxxxxx;Password=xxxxxx"  Microsoft.EntityFrameworkCore.SqlServer -Context CsharpCornerContext -Force  

این کار، کلاس DBContext شما و تمامی عناصر دیگر جدول را ایجاد خواهد کرد.

فایل محتوای ایجاد شده را باز کرده و سازنده های بدون پارامتر را با متد OnConfiguring حذف کنید.

الگوی طراحی

الگوی طراحی

سپس، باید یک DBContextPool در API Project خود ایجاد کنید.

به API Project خود رفته و فایل startup.cs را باز کنید.

متد ConfigureServices را تغییر داده و DBContextPool را بصورت زیر ایجاد کنید.

services.AddEntityFrameworkSqlServer();  
           services.AddDbContextPool<CsharoCornerContext>((serviceProvider, options) => { options.UseSqlServer(Configuration.GetConnectionString("connStr")); });  

رشته ی اتصال در appsettings.json اضافه شده و در اینجا ارجاع داده می شود.

تذکر

اگر خطایی برای UseSqlServer دریافت کردید، آن را بصورت دستی با استفاده از Microsoft.EntityFrameworkCore وارد کنید.

 ایجاد یک New Class Library Project برای Repository

مراحل فوق را جهت ایجاد یک پروژه ی کتابخانه ی کلاس دنبال کنید.

سپس، یک DBHelper Class ایجاد کنید (اختیاری). یک کلاس مخزن به نام “Common Repository” ایجاد کنید.

الگوی طراحی

پس از آن، DBContext خود را (و DBHelper اگر آن را پیکربندی کردید) درون مخزن خود، بطوری که در ادامه نشان داده شده، تزریق کنید.

class CommonRepository : ICommonRepository  
 {  
     private readonly IDBHelper dBHelper;  
     private CsharoCornerContext csharoCornerContext;  
  
     public CommonRepository(IDBHelper dBHelper, CsharoCornerContext csharoCornerContext)  
     {  
         this.csharoCornerContext = csharoCornerContext;  
         this.dBHelper = dBHelper;  
     }  
 } 

یک کنترل کننده ی مشترک در API Project خود ایجاد کنید.

[Route("api/[controller]")]  
  [ApiController]  
  public class CommonController : ControllerBase  
  {  
  } 

مخزن مشترک خود را درون یک کنترل کننده ی مشترک بصورت زیر تزریق کنید.

[Route("api/[controller]")]  
    [ApiController]  
    public class CommonController : ControllerBase  
    {  
        private ICommonRepository commonRepository;  
        public CommonController(ICommonRepository commonRepository)  
        {  
            this.commonRepository = commonRepository;  
        }  
    }  

سپس، نیاز است مخزن را در فایل startup.cs از API Project پیکربندی کنیم.

دو خط زیر را در متد ConfigurationService خود اضافه کنید.

services.AddScoped<ICommonRepository, CommonRepository>();  
            services.AddScoped<IDBHelper, DBHelper>();

 ایجاد یک Class Library Prpject برای Models، DTO، و ResultSet

همان مراحل فوق را برای ایجاد پروژه ی کتابخانه ی کلاس خود دنبال کنید.

Model ها جهت گرفتن داده ها از کاربران، که payload  برای یک API است، به کار می روند.

DTO برای انتقال داده ها از یک لایه به لایه ای دیگر استفاده می شود.

ResultSet جهت انجام عملیات های DB مورد استفاده قرار می گیرد.

پس از ایجاد یک پروژه ی کتابخانه ی کلاس جداگانه برای هر یک از موارد فوق، ساختار بصورت زیر خواهد بود.

الگوی طراحی

 ایجاد یک Class Library Project برای AutoMapper

مشابه مراحل فوق را جهت ایجاد یک پروژه ی کتابخانه ی کلاس دنبال کنید.

باید AutoMapper را، که یک کتابخانه ی کوچک ساده می باشد که جهت برطرف کردن مسئله ای به ظاهر پیچیده — رهایی از کدی که یک شیء را به دیگری نگاشت کرده — ساخته شده، نصب کنیم.

PM> Install-Package AutoMapper  

بر روی Project راست کلیک کنید و یک کلاس  mapping ایجاد کرده و پروفایل را با استفاده از AutoMapper ارث بری کنید.

کد آن مشابه زیر می باشد.

using AutoMapper;  
using System;  
using System.Collections.Generic;  
using System.Text;  
  
namespace CsharpCornerDemo.Mapping  
{  
    public class Mappers : Profile  
    {  
        public Mappers()  
        {  
  
        }  
    }  
}  

پس از آن، باید AutoMapper را در API Project پیکربندی کرده و یک نمونه ی singleton از آن ایجاد کنیم.

فایل Startup.cs را باز کرده و متد ConfigurationService را بصورت زیر تغییر دهید.

تذکر: باید AutoMapper را نصب کنید.

var mappingConfiguration = new MapperConfiguration(config => config.AddProfile(new Mappers()));  
            IMapper mapper = mappingConfiguration.CreateMapper();  
            services.AddSingleton(mapper); 

 نوشتن یک API جهت اتصال تمامی لایه ها

بیایید یک API برای گرفتن داده ها از Testtbl بنویسیم.

ابتدا، یک ResultSet و DTO برای Testtbl ایجاد کنید.

الگوی طراحی

نگاشت کننده ها را درون مخزن و کنترل کننده تزریق کنید. به این شکل می باشد.

public class CommonRepository : ICommonRepository  
    {  
        private readonly IDBHelper dBHelper;  
        private CsharoCornerContext csharoCornerContext;  
        private IMapper mapper;  
  
        public CommonRepository(IDBHelper dBHelper, CsharoCornerContext csharoCornerContext, IMapper mapper)  
        {  
            this.csharoCornerContext = csharoCornerContext;  
            this.dBHelper = dBHelper;  
            this.mapper = mapper;  
        }  
    }  

متدی برای گرفتن داده های آزمایشی در یک مخزن مشترک بصورت زیر، که Stored Procedure را فراخوانی می کند، ایجاد کنید.

public IEnumerable<TestDTO> GetTestData()  
      {  
          var result = csharoCornerContext.Query<TestResultSet>().FromSql("dbo.TestData").ToList();  
          return mapper.Map<List<TestDTO>>(result);  
      } 

یک API در کنترل کننده ی مشترک ایجاد کرده و متد GetTestData را فراخوانی کنید.

[HttpGet("test")]  
       [ProducesResponseType(200)]  
       [ProducesResponseType(400)]  
       public async Task<IActionResult> GetTestData()  
       {  
           try  
           {  
  
               var test = await Task.FromResult(commonRepository.GetTestData());  
               return Ok(test);  
           }  
           catch  
           {  
               return BadRequest("Could not fetch test data");  
           }  
       } 

همچنین نیاز است نگاشت کننده ها را اضافه کنیم.

public class Mappers : Profile  
  {  
      public Mappers()  
      {  
          CreateMap<TestResultSet, TestDTO>();  
      }  
  }  

بیایید یک API را امتحان کنیم.

الگوی طراحی

خلاصه
در این مقاله، نحوه ی استفاده از الگوی طراحی Repository در NET Core. و نیز نحوه ی بکارگیری AutoMapper را مورد بحث قرار دادیم.

امیدوارم این مقاله مفید بوده و شما نیز اکنون درک بهتری از جریان داده داشته باشید.

  • پسورد: www.mspsoft.com
زهره سلطانیان

نوشته‌های مرتبط

دیدگاه‌ها

*
*

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.

کدیشن ! مارکت پروژه های برنامه نویسی راه اندازی شدیه توکه پا بریم ببینم