الگوی Repository در ASP.NET MVC
چهارشنبه 27 دی 1396در این مقاله، الگوی Repository که اغلب در برنامههای مهم مورد استفاده قرار میگیرد را خواهیم آموخت. الگوی ریپوزیتوری، UI برنامه، منطق و اجزای دسترسی به داده را به لایههای مختلف تقسیم میکند که نگهداری و تست آنها آسان میشود.
ما یک برنامه Client را برای شناخت بهتر الگوی ریپوزیتوری ایجاد میکنیم. از هر نوع ساختار پروژهای میتوانیم برای پیادهسازی این الگو استفاده کنیم. مثلا میتوانیم یک کلاس repository را در فولدر پروژه MVC خودمان بسازیم یا میتوانیم پروژههای class library مختلفی در سولوشن ایجاد کنیم یا میتوانیم از معماری پیاز استفاده کنیم که شامل پروژههای class library مختلف و پروژه MVC در یک سولوشن است. برای سادگی کار، ما یک class library ریپوزیتوری و یک پروژه MVC در یک سولوشن میسازیم. در الگوی ریپوزیتوری میتوانیم برای پیادهسازی عملیات CRUD از generic repository استفاده کنیم که میتواند با هر موجودیت پروژه و ریپوزیتوریهای سفارشی برای اجرای عملیات خاص از موجودیتهای خاص مورد استفاده قرار گیرد. ابتدا یک کلاس 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; }
}
}
سپس interface ای در پروژه Repository class library میسازیم. این interface شامل عملیات پایگاه داده جنریک برای هر موجودیت است. ما آن را 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();
}
}
سپس، یک کلاس repository برای پیادهسازی این interface ایجاد میکنیم. آن را کلاس 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 برای دستیابی به دادهها استفاده میکنیم، بنابراین یک کلاس 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 class library را در پروژه MVC Web رفرنس دهیم. برای این کار، روی پروژه Client.Web کلیک راست کرده و add reference را میزنیم و پروژه Client.Repository را انتخاب میکنیم. حالا در پروژه Client.Web یک کنترلر را توسط scaffolding میسازیم. برای scaffold روی فولدر controller راست کلیک کرده و new controller with views using entity framework را انتخاب میکنیم، نام آن را هم ClientController میگذاریم. برای استفاده از کلاس IRepository برای عملیات پایگاه داده، شیءای از کلاس Repository ایجاد کرده و متدهای کلاس Repository را فراخوانی میکنیم. حالا برنامه را بسازید و اجرا کنید. باید بتوانید عملیات CRUD را انجام دهید.
آموزش asp.net mvc
- ASP.net MVC
- 6k بازدید
- 10 تشکر