الگوی Repository در برنامهنویسی (Repository Pattern)
الگوی Repository در برنامهنویسی (Repository Pattern)

مقدمه
در طراحی نرمافزار، یکی از اصول مهم، جدا کردن لایهها و مدیریت وابستگیها است. وقتی پروژه بزرگ میشود، نیاز داریم کدها را طوری سازماندهی کنیم که منطق تجاری (Business Logic) از جزئیات پایگاه داده جدا باشد.
الگوی Repository Pattern دقیقاً برای همین هدف بهوجود آمده است.
تعریف Repository Pattern
Repository Pattern الگویی است برای جداسازی منطق دسترسی به دادهها (Data Access Logic) از منطق کسبوکار (Business Logic) در یک برنامه.
به زبان ساده:
لایهی Repository مانند یک واسطه (Mediator) بین دیتابیس و کد برنامه عمل میکند.
برنامهنویس دیگر مستقیماً با Entity Framework، SQL، Dapper یا MongoDB کار نمیکند.
بلکه از طریق Repository، دادهها را میخواند یا مینویسد.
هدف اصلی Repository Pattern
| هدف | توضیح |
|---|---|
| جدا کردن لایهها | منطق داده از منطق تجاری جدا میشود. |
| تستپذیری بهتر | میتوان Repository را در تستها Mock کرد. |
| انعطافپذیری در برابر تغییر دیتابیس | اگر نوع پایگاه داده تغییر کند، فقط Repository باید تغییر کند. |
| کد تمیزتر و منظمتر | منطق ذخیرهسازی و واکشی در یک محل متمرکز است. |
ساختار کلی الگو
معمولاً Repository Pattern از ۳ بخش اصلی تشکیل میشود:
Interface → مشخص میکند چه عملیاتهایی باید وجود داشته باشند (مثل Get, Add, Remove).
Concrete Repository → پیادهسازی واقعی عملیاتها (مثلاً با EF Core یا SQL).
Service / Business Layer → از Repository استفاده میکند تا دادهها را مدیریت کند.
مثال کامل در C#
فرض کنیم یک موجودیت ساده به نام Student داریم:
تعریف Interface برای Repository
این Interface مشخص میکند که هر Repository مربوط به Student باید بتواند عملیات CRUD را انجام دهد.
پیادهسازی Repository با Entity Framework
حالا تمام کدهای مربوط به دیتابیس در همین کلاس متمرکز است.
استفاده از Repository در لایهٔ سرویس (Business Logic)
استفاده در برنامه
ترکیب با Unit of Work Pattern
در پروژههای بزرگ معمولاً Repository Pattern همراه با Unit of Work Pattern استفاده میشود.
Unit of Work نقش هماهنگکننده دارد تا چند Repository در یک تراکنش (Transaction) با هم کار کنند.
مزایای Repository Pattern
| مزیت | توضیح |
|---|---|
| کد تمیز و ساختارمند | عملیات داده از منطق کسبوکار جدا میشود. |
| تستپذیری آسان | میتوان Repository را Mock کرد. |
| تغییر آسان دیتابیس | نیازی نیست Business Logic تغییر کند. |
| قابلیت استفاده مجدد | Repositoryها در قسمتهای مختلف سیستم استفاده میشوند. |
معایب احتمالی
| مشکل | توضیح |
|---|---|
| پیچیدگی اضافی | برای پروژههای کوچک ممکن است بیش از حد باشد. |
| لایههای زیاد | گاهی کد زیاد و لایههای اضافی ایجاد میکند. |
| وابستگی به Interface زیاد | برای تازهکارها ممکن است درک آن سختتر باشد. |
جمعبندی نهایی
الگو Repository و انواع الگوهای مختلف دیگر در دوره جامع برنامهنویسی وب مهندس بهمن آبادی آموزش داده شده است.
الگوی Repository یکی از پرکاربردترین و مهمترین الگوهای معماری در دنیای برنامهنویسی شیءگرا است، مخصوصاً در .NET، Java، Python و Node.js.
این الگو باعث میشود:
سیستم ساختارمندتر، تستپذیرتر و مقیاسپذیرتر باشد.
توسعهدهنده بتواند با تمرکز بر منطق کسبوکار کار کند، نه با دیتابیس.