Чередуйте реализацию в внедрении зависимости - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть спокойный API-интерфейс хранилища b2c, и теперь мне нужно реализовать его для хранилища b2b, используя одни и те же конечные точки, в обоих типах все работает по-разному, поэтому реализация отличается.Прямо сейчас один пример конечной точки будет выглядеть так:


use App\Service\Calculator;

class CartController extends Controller
{
    private $calculator;

    public function __construct(Request $request, Calculator $calculator)
    {
        parent::__construct($request);
        $this->calculator = $calculator
    }

    public function index()
    {
        $this->calculator->calculate();
        return response()->json(['ok'], 200);
    }

}

Так что я подумал, чтобы ввести интерфейс и позволить провайдеру решить, какую реализацию использовать.Вот так:


namespace App\Service;

interface CalculatorInterface
{
    public function calculate();
}

namespace App\Service;

class Service1 implements CalculatorInterface
{
    public function calculate() { /** */ }
}

namespace App\Service;

class Service2 implements CalculatorInterface
{
    public function calculate() { /** */ }
}

use App\Service\CalculatorInterface;

class CartController extends Controller
{
    private $calculator;

    public function __construct(Request $request, CalculatorInterface $calculator)
    {
        parent::__construct($request);
        $this->calculator = $calculator
    }

    public function index()
    {
        $this->calculator->calculate();
        return response()->json(['ok'], 200);
    }
}

Чтобы решить, какой тип использования (b2b или b2c) мне нужен пользователь, который вошел в систему, которую яне могу получить при регистрации провайдера.Я мог бы решить в контроллере, какой пользователь реализации, но у меня много конечных точек, и мне пришлось бы делать это вручную во всех них.Так что мне нужно чередовать реализацию в внедрении зависимостей на основе пользователя.Может быть, передать параметр в заголовке запроса и, таким образом, при условии, что я проверяю это?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...