جدا کردن با لاراول: واسط های اتصال به پیاده سازی ها با استفاده از ارائه دهندگان خدمات

آیا می دانید ارائه دهندگان خدمات چیست و چگونه آنها روی لاراول کار می کنند؟
در این مقاله ما تصویب کردن یک مثال دنیای واقعی ایجاد رابط و استفاده از ارائه دهنده خدمات برای اتصال آن به یک اجرای.
ارائه دهنده خدمات در لاراول چیست؟
مطابق اسناد لاراول:
ارائه دهندگان خدمات مکان اصلی کلیه راه اندازی های کاربردی Laravel هستند. برنامه شخصی شما و همچنین کلیه خدمات اصلی Laravel از طریق ارائه دهندگان خدمات راه اندازی می شود.
این بدان معناست که تمام خدمات اصلی در Laravel (مسیرهای میانه ، مسیرها ، پستانداران ، صف ها و غیره) از طریق ارائه دهندگان خدمات “بوت شده” هستند.
اگر می خواهید در مورد نحوه کار ارائه دهندگان خدمات اطلاعات بیشتری کسب کنید ، اسناد Laravel را بررسی کنید ، در این آموزش ما به استفاده از ارائه دهندگان خدمات و رابط ها برای اجرای تزریق وابستگی و الگوی آداپتور می پردازیم.
مثال در دنیای واقعی: رابط
بنابراین ، بیایید از شما بخواهیم یک کلاس مخزن کاربر ایجاد کنید ، اما مطمئن نیستید که آیا ORM پروژه خود را در آینده تغییر می دهید.
این سناریوی مناسب برای استفاده از الگوی آداپتور رابط + است ، درست است؟ به این ترتیب شما فقط ایجاد می کنید UserRepository
رابط و شما می توانید چندین پیاده سازی مانند EloquentUserRepository
با DoctrineUserRepository
با PDOUserRepository
، و غیره
بنابراین رابط ما به این صورت خواهد بود:
interface UserRepository
{
public function add(SeriesFormRequest $request): Users;
}
اما وقتی رابط را روی کنترلر یا لایه سرویس تزریق می کنید چگونه می توانید اجرای مورد نظر خود را به رابط متصل کنید؟
تزریق رابط در لایه کنترل کننده/سرویس:
بنابراین ، اکنون ما یک کنترلر کاربر داریم که کاربر را از طریق تزریق وابستگی دریافت می کند ، به نظر می رسد:
class UserController extends Controller
{
public function __construct(private UserRepository $repository)
{
// Dependency injection
}
public function store(UsersFormRequest $request)
{
$serie = $this->repository->add($request);
}
}
چگونه برنامه ما می داند که ما خاص می خواهیم EloquentUserRepository
در عوض DoctrineUserRepository
به عنوان مثال؟ اینگونه است که ارائه دهنده خدمات جادوی خود را کار می کند.
اتصال رابط به اجرای انتخاب شده
اول ، ما ارائه دهنده خدمات خود را با استفاده از دستور artisan ایجاد خواهیم کرد: php artisan make:provider UserRepositoryProvider
بشر اکنون ما یک ارائه دهنده جدید داریم app\Providers\UserRepositoryProvider.php
بشر
class UserRepositoryProvider extends ServiceProvider
{
/**
* Register services.
*
* @return void
*/
public function register()
{
$this->app->bind(\App\Repositories\UserRepository::class, \App\Repositories\EloquentUserRepository::class);
}
}
در register()
روش برای اتصال رابط کاربری ما به اجرای انتخاب شده (floquentUserRepository) مسئولیت پذیر خواهد بود ، بنابراین در آینده ، اگر می خواهیم این اجرای را به عنوان مثال به دکترین تغییر دهیم ، فقط باید در ارائه دهنده خدمات خود تغییر کنیم!
پیکربندی برنامه
در آخر ، ما باید این ارائه دهنده را به لاراول خود اضافه کنیم app.php
فایل را پیکربندی کنید ، بنابراین می داند چه کاری انجام دهید. در app\config\app.php
در آرایه ارائه دهندگان این خط را اضافه خواهید کرد:
App\Providers\UserRepositoryProvider::class,
و همین است! اکنون شما یک رابط کاربری با استفاده از ارائه دهندگان خدمات به اجرای واقعی دارید. این یکی از موارد استفاده از این ویژگی عالی لاراول است ، اما می توانید اطلاعات بیشتری را در مورد اسناد Laravel برای کشف امکانات بیشتر بررسی کنید.
با تشکر از خواندن!