В настоящее время я реализую проект, и у меня есть вопрос относительно нескольких классов, реализующих один и тот же интерфейс.
Итак, сейчас у меня есть несколько типов скидок, которые могут быть применены к Заказу.Итак, я создал DiscountInterface, который имеет метод check (), который проверяет, применима ли скидка, и метод apply (), который применяет скидку.
Пока все хорошо.Затем я реализовал первый тип скидки в классе, который реализует DiscountInterface и имеет логику для проверки и применения этой конкретной скидки.
В моем контроллере я внедряю DiscountInterface.Когда заказ получен, я вызываю методы check () и apply (), и все работает отлично.
Мой вопрос заключается в следующем.Я для реализации второго типа скидок.После моей реализации мне нужно будет создать новый класс, который реализует DiscountInterface.Но когда пришло время вызвать его на контроллере, как это должно быть сделано.Поскольку у меня разные классы с одинаковыми методами.
Следующий код работает, если у меня есть один класс, реализующий эти методы, но что произойдет, если у меня есть два класса, реализующих их?
public function discount(
Request $request,
DiscountInterface $discount,
CustomerRepository $customer,
ProductRepository $product,
ValidatorInterface $validator,
OrderServiceInterface $orderService
)
{
$data = json_decode($request->getContent(), true);
$order = $orderService->convertDataToOrder($data, $customer, $product, $validator);
if($discount->check($order, $customer)){
$order = $discount->apply($order);
}