الگوی ریپوزیتوری ( Repository Pattern ) در ASP.NET MVC

در این مقاله ، در مورد الگوی ریپوزیتوری (Repository Pattern ) که اغلب برای ایجاد برنامه های کاربردی اینتر پرایز استفاده می شود مطالبی می آموزیم. الگوی ریپوزیتوری می تواند UI برنامه، اجزای دسترسی به داده ها و Business logic را به لایه های مختلفی تقسیم می کند که به راحتی قابل نگهداری و قابل آزمایش هستند. این آموزش repository در mvc به صورت گام به گام می باشد.

برای درک بهتر الگوی ریپوزیتوری ، یک برنامه Client ایجاد خواهیم کرد. می توانیم هر نوع ساختار پروژه را برای اجرای الگوی ریپوزیتوری ایجاد کنیم. برای مثال، می توانیم یک کلاس ریپوزیتوری را در خود فولدر پروژه MVC ایجاد کنیم ، یا می توانیم پروژه ای در کلاس های مختلف ازlibrary را در به همان روش ایجاد کنیم یا می توانیم از معماری onion برای اجرای آن که شامل پروژه های کلاس های مختلفی از library و پروژه MVC در یک راه حل است را بکار گیریم.

برای سادگی کار، ما یک Repository class library و یک پروژه MVC را در یک سلوشن ایجاد خواهیم کرد. در الگوی ریپوزیتوری، می توانیم از ریپوزیتوری عمومی و کلی ( generic repository ) برای اجرای عملیات CRUD استفاده کنیم که می تواند برای اجرای عملیاتی خاص در entity ، توسط هر entity  از پروژه و ریپوزیتوری مرسوم استفاده شود. ابتدا یک کلاس Client در پروژه MVC ایجاد کنید.

namespace Client.Web.Models  
۰۲٫{  
۰۳٫    class Client  
۰۴٫    {  
۰۵٫        public int Id { get; set; }  
۰۶٫        public string Name { get; set; }  
۰۷٫        public string City { get; set; }  
۰۸٫        public string Email { get; set; }  
۰۹٫        public string Mobile { get; set; }  
۱۰٫    }  
۱۱٫}  

الگوی Repository در MVC

سپس، ما یک رابط ( interface ) را در پروژه ریپوزیتوری class library ایجاد خواهیم نمود. این رابط شامل عملیات عمومی پایگاه داده برای هر domain entity می باشد. ما آن را  IRepository نامگذاری می کنیم.

 

namespace Client.Repository  
۰۲٫{  
۰۳٫    public interface IRepository<T> where T:class  
۰۴٫    {  
۰۵٫        IEnumerable<T> SelectAll();  
۰۶٫        T SelectById(int id);  
۰۷٫        void Insert(T obj);  
۰۸٫        void Update(T obj);  
۰۹٫        void Delete(int id);  
۱۰٫        void Save();  
۱۱٫    }  
۱۲٫}  

سپس، یک کلاس ریپوزیتوری برای اجرای این رابط ایجاد خواهیم کرد. ما آن را class Repository نامگذاری خواهیم نمود.

 

namespace Client.Repository  
۰۲٫{  
۰۳٫    public class Repository<T>:IRepository<T> where T:class  
۰۴٫    {  
۰۵٫        protected readonly DbContext db;  
۰۶٫        public Repository(DbContext _db)  
۰۷٫        {  
۰۸٫            db = _db;  
۰۹٫        }  
۱۰٫        public IEnumerable<T> SelectAll()  
۱۱٫        {  
۱۲٫            return db.Set().ToList();  
۱۳٫        }  
۱۴٫        public T SelectById(int id)  
۱۵٫        {  
۱۶٫            return db.Set().Find(id);  
۱۷٫        }  
۱۸٫        public void Insert(T obj)  
۱۹٫        {  
۲۰٫            db.Set().Add(obj);  
۲۱٫        }  
۲۲٫        public void Update(T obj)  
۲۳٫        {  
۲۴٫            db.Entry(obj).State = EntityState.Modified;  
۲۵٫        }  
۲۶٫        public void Delete(int id)  
۲۷٫        {  
۲۸٫             T obj = db.Set().Find(Id);  
۲۹٫             this.Remove(obj);  
۳۰٫        }  
۳۱٫        public void Save()  
۳۲٫        {  
۳۳٫            db.SaveChanges();  
۳۴٫        }  
۳۵٫    }  
۳۶٫}  

برای دسترسی به داده ها ، ما از Entity framework code first approach استفاده می کنیم ، بنابراین یک کلاس DbContext ایجاد خواهیم کرد. کلاس ClientContext می تواند به صورت فهرست زیر نمایش داده شود:

 

namespace Client.Web.Models  
۰۲٫{  
۰۳٫    using System;  
۰۴٫    using System.Data.Entity;  
۰۵٫    using System.Linq;  
۰۶٫  
۰۷٫    public class ClientContext : DbContext  
۰۸٫    {  
۰۹٫          
۱۰٫        public ClientContext()  
۱۱٫            : base("name=ClientContext")  
۱۲٫        {  
۱۳٫        }  
۱۴٫          
۱۵٫        public virtual DbSet<Client> Client  { get; set; }  
۱۶٫    }  
۱۷٫}  

ارجاع به الگوی Repository در MVC

اکنون باید پروژه ریپوزیتوری class library را به پروژه MVC Web ارجاع دهیم. برای این کار، بر روی پروژه Client.Web راست کلیک کرده و پروژه reference Client.Repository را اضافه کنید. اکنون یک کنترلر را به پروژه Client.Web را (scaffold) خواهیم زد.

برای scaffold زدن، روی پوشه کنترلر راست کلیک کرده و کنترلر جدید را با استفاده از چارچوب نهاد (entity) انتخاب کرده و نام آن را Client Controller بگذارید. برای استفاده از کلاس IRepository برای عملیات پایگاه داده، موضوع و مقصود از کلاس ریپوزیتوری را ایجاد خواهیم نمود و روش کلاس ریپوزیتوری را نامگذاری خواهیم کرد. اکنون برنامه را بسازید و اجرا کنید . ما باید قادر باشیم عملیات CRUD را اجرا کنیم.

repository در mvc

ورکشاپ رایگان دوره های تخصصی برنامه نویسی

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

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

همچنین ببینید

ASPCore

آموزش ASP.NET Core MVC و ویژوال استودیو

در این سری آموزش ها به نحوه ساخت یک پروژه در ASP.NET Core MVC 2 …

یک نظر

  1. نوشین یزدان پناه

    سلام در این آموزش طریقه اتصال بهپایگاه داده گفته نشده و به نظر من ناقص هست

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

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