Что такое интерфейс Laravel?

Laravel interface — это соглашение о том, какие методы будут использоваться в конкретном классе. На самом деле интерфейсы не являются специфическими для Laravel или даже для нативного PHP, если уж на то пошло. Поскольку мы хорошо знакомы с Laravel, мы поговорим об интерфейсах в Laravel.

Если вы разрабатываете небольшое приложение, нет необходимости использовать репозитории. Однако, если вы хотите создавать масштабируемые приложения и организовывать свой код, вам очень помогут репозитории.

Что такое шаблон репозитория?

Репозиторий представляет собой архитектурный уровень, обеспечивающий связь между приложением и источником данных. Это широко используемый шаблон, суть которого в том, что приложению не нужно знать, какой источник данных реализован и как он реализован. Это упрощает переключение на другой источник данных или внесение структурных изменений в существующий источник данных.

Шаблон репозитория представляет интерфейс репозитория, который определяет способ взаимодействия приложения и источников данных. Каждый источник данных имеет свой класс, реализующий интерфейс репозитория. Класс контроллера будет вызывать методы, определенные в интерфейсе репозитория, и не будет знать, как и откуда берутся данные.

Теперь поговорим об интерфейсах.

Во-первых, что такое интерфейсы?

  • Интерфейсы — это на 100% абстрактные классы — у них есть методы, но у методов нет «внутренностей».
  • Интерфейсы не могут быть созданы — они представляют собой конструкцию в ООП, которая позволяет вам внедрять «качества» в классы… как абстрактные классы.
  • Там, где абстрактный класс может иметь как пустые, так и работающие/конкретные методы, все интерфейсные методы должны быть оболочками — то есть, это должно быть предоставлено классу (использующему интерфейс) для конкретизации методов.

Помните: когда класс использует/реализует интерфейс, класс ДОЛЖЕН определять все методы/функции интерфейса, иначе механизм php выдаст ошибку.

ОСНОВНЫЕ НАЗНАЧЕНИЯ ИНТЕРФЕЙСА:

  • Интерфейсы позволяют вам определять/создавать общую структуру для ваших классов — устанавливать стандарт для объектов.
  • Интерфейсы решают проблему одиночного наследования — они позволяют внедрять «качества» из нескольких источников.
  • Интерфейсы обеспечивают гибкую базовую/корневую структуру, которую вы не получаете с классами.
  • Интерфейсы хороши, когда над проектом работает несколько программистов — вы можете создать свободную структуру для программистов и позволить им беспокоиться о деталях.

Теперь вам может быть интересно, когда я должен использовать репозиторий вместо интерфейса или наоборот.

КОГДА НУЖНО СОЗДАВАТЬ ИНТЕРФЕЙС?

  • Если у вас есть класс, который никогда не создается напрямую в вашей программе, это хороший кандидат на роль интерфейса. Другими словами, если вы создаете класс, который будет служить только родителем для других классов, его, вероятно, следует превратить в интерфейс.
  • Когда вы знаете, какие методы должны быть у класса, но не уверены, какие именно будут детали.
  • Если вы хотите быстро наметить базовые структуры ваших классов, чтобы они служили шаблоном для других, держите кодовую базу предсказуемой и согласованной.

Приложение — Пользовательский интерфейс

Приложение\Репозитории\Пользователь

Пользовательский интерфейс.php:

<?php

namespace App\Repositories\User;


interface UserInterface
{


    public function getAll();


    public function find($id);


    public function delete($id);
}

UserRepoServiceProvide.php:

<?php

namespace App\Repositories\User;


use Illuminate\Support\ServiceProvider;


class UserRepoServiceProvide extends ServiceProvider
{
    /**
     * Bootstrap the application services.
     *
     * @return void
     */
    public function boot()
    {
    }


    /**
     * Register the application services.
     *
     * @return void
     */
    public function register()
    {
        $this->app->bind('App\Repositories\User\UserInterface', 'App\Repositories\User\UserInterface');
    }
}

UserRepository.php

<?php

namespace App\Repositories\User;


use App\Models\User;
use App\Repositories\User\UserInterface as UserInterface;



class UserRepository implements UserInterface
{
    public $user;


    function __construct(User $user)
    {
        $this->user = $user;
    }


    public function getAll()
    {
        return $this->user->get();
    }


    public function find($id)
    {
        return $this->user->find($id);
    }



    public function delete($id)
    {
        return $this->user->delete($id);
    }
}

Приложение\Http\Контроллеры;

UserController.php

public function __construct(UserRepository $user)
{
    $this->user = $user;
  
}
public function index()
{
   return $dene = $this->user->getAll();
}

http://локальный:8000/пользователь: