پرش به مطلب اصلی

لایه ریپوزیتوری و فایل‌های معیار

در این سند

مقدمه

در توسعه Laravel، لایه ریپوزیتوری و فایل‌های معیار به عنوان ترکیبی قدرتمند برای مدیریت بازیابی و دستکاری داده‌ها عمل می‌کنند. پکیج andersao/l5-repository معمولاً برای پیاده‌سازی لایه ریپوزیتوری استفاده می‌شود و روشی مناسب برای جداسازی عملیات پایگاه داده از بقیه برنامه فراهم می‌کند.

مزیت کلیدی

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

چرا ریپوزیتوری‌ها؟

ریپوزیتوری‌ها به انتزاع لایه دسترسی به داده کمک می‌کنند و امکان سازماندهی و نگهداری بهتر کد را فراهم می‌کنند. پکیج andersao/l5-repository با گسترش ORM Eloquent لاراول، مجموعه‌ای از ابزارها را برای ایجاد، خواندن، به‌روزرسانی و حذف رکوردها به روشی سازگار ارائه می‌دهد.

نصب andersao/l5-repository

برای شروع کار با andersao/l5-repository، باید پکیج را با استفاده از Composer نصب کنید:

ترمینال
composer require andersao/l5-repository

پس از نصب، می‌توانید ریپوزیتوری‌ها را برای مدل‌های خود راه‌اندازی کنید.

راهنمای پیاده‌سازی

ایجاد ریپوزیتوری‌ها

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

گام 1: ایجاد رابط ریپوزیتوری

app/Repositories/UserRepository.php
<?php

namespace App\Repositories;

use Prettus\Repository\Contracts\RepositoryInterface;

interface UserRepository extends RepositoryInterface
{
// می‌توانید متدهای سفارشی اینجا اضافه کنید
}

گام 2: ایجاد پیاده‌سازی ریپوزیتوری

app/Repositories/UserRepositoryEloquent.php
<?php

namespace App\Repositories;

use Prettus\Repository\Eloquent\BaseRepository;
use Prettus\Repository\Criteria\RequestCriteria;
use App\Models\User;

class UserRepositoryEloquent extends BaseRepository implements UserRepository
{
public function model()
{
return User::class;
}

public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
}
}

گام 3: ثبت در AppServiceProvider

app/Providers/AppServiceProvider.php
<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind(
\App\Repositories\UserRepository::class,
\App\Repositories\UserRepositoryEloquent::class
);
}
}

متدهای رایج ریپوزیتوری

پکیج andersao/l5-repository چندین متد داخلی برای عملیات رایج ارائه می‌دهد:

متدتوضیحاتمثال
all()دریافت تمام رکوردها$repository->all()
find($id)یافتن با ID$repository->find(1)
findByField($field, $value)یافتن با فیلد$repository->findByField('email', 'user@example.com')
findWhere(array $where)یافتن با شرایط$repository->findWhere(['status' => 'active', 'type' => 'admin'])
create(array $attributes)ایجاد رکورد جدید$repository->create(['name' => 'John', 'email' => 'john@example.com'])
update(array $attributes, $id)به‌روزرسانی رکورد$repository->update(['status' => 'inactive'], 1)
delete($id)حذف رکورد$repository->delete(1)
orderBy($column, $direction)مرتب‌سازی نتایج$repository->orderBy('created_at', 'desc')->all()
with($relations)بارگذاری روابط$repository->with(['posts', 'comments'])->find(1)
paginate($limit)صفحه‌بندی نتایج$repository->paginate(15)

ویژگی‌های پیشرفته

کش کردن نتایج

این پکیج از کش کردن نتایج ریپوزیتوری برای بهبود عملکرد پشتیبانی می‌کند:

فعال‌سازی کش
// در کلاس ریپوزیتوری شما
public function boot()
{
$this->pushCriteria(app(RequestCriteria::class));
$this->setCacheLifetime(60); // کش برای 60 دقیقه
}
ملاحظات کش

هنگامی که داده‌های شما به طور مکرر تغییر می‌کنند، با کش کردن مراقب باشید. ممکن است نیاز به پیاده‌سازی استراتژی‌های نامعتبرسازی کش داشته باشید.

لایه ارائه‌دهنده

می‌توانید از ارائه‌دهنده‌ها برای قالب‌بندی داده‌های خود قبل از برگرداندن استفاده کنید:

app/Presenters/UserPresenter.php
<?php

namespace App\Presenters;

use App\Transformers\UserTransformer;
use Prettus\Repository\Presenter\FractalPresenter;

class UserPresenter extends FractalPresenter
{
public function getTransformer()
{
return new UserTransformer();
}
}
استفاده از ارائه‌دهنده‌ها
// در ریپوزیتوری شما
public function presenter()
{
return UserPresenter::class;
}

نتیجه‌گیری

پیاده‌سازی لایه ریپوزیتوری با andersao/l5-repository و فایل‌های معیار در Laravel، جداسازی تمیز دغدغه‌ها را در برنامه شما ترویج می‌کند. ریپوزیتوری‌ها عملیات پایگاه داده را انتزاعی می‌کنند، در حالی که فایل‌های معیار روشی انعطاف‌پذیر برای فیلتر کردن یا اصلاح پویای نتایج پرس‌وجو ارائه می‌دهند.

قابلیت‌های andersao/l5-repository را برای مدیریت سناریوهای پیچیده‌تر، مانند کش کردن، صفحه‌بندی و بارگذاری روابط، برای بازیابی کارآمد داده در پروژه‌های Laravel خود بررسی کنید.