У меня есть спокойный 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) мне нужен пользователь, который вошел в систему, которую яне могу получить при регистрации провайдера.Я мог бы решить в контроллере, какой пользователь реализации, но у меня много конечных точек, и мне пришлось бы делать это вручную во всех них.Так что мне нужно чередовать реализацию в внедрении зависимостей на основе пользователя.Может быть, передать параметр в заголовке запроса и, таким образом, при условии, что я проверяю это?