Достигнуть открытого-закрытого принципа (SOLID) с использованием интерфейса - PullRequest
0 голосов
/ 01 января 2019

У меня есть несколько вариантов оплаты (Stripe, Paypal, PayUMoney и т. Д.).Я хочу создать отдельный класс для каждого типа платежа и Интерфейс платежей , который будет реализован такими классами, как этот,

interface PaymentInterface {
   public function payment($params);
}
class Stripe implements PaymentInterface {
   public function payment($params) { ... }
}

class Paypal implements PaymentInterface {
   public function payment($params) { ... }
}

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

class PaymentModule {
public function confirmPayment(Request $request){
   // create an object of the payment class
   // $obj = new PaymentTypeClass **(Problem is here)**
   // $obj->payment($params)
  }
}

Мой вопрос здесь, как я могу динамически создать связанный класс / объект платежа и вызвать payment() метод из метода main?

Если я создаю объект условно, то я нарушаю принцип Open-Closed.Потому что я проверяю тип платежа, используя Если ... еще , затем создаю объект и вызываю payment () , который может потребовать дальнейшей модификации.

1 Ответ

0 голосов
/ 01 января 2019

Если я создаю объект условно, то я нарушаю принцип Open-Closed.Потому что я проверяю тип платежа с помощью If ... else, затем создаю объект и вызываю метод payment (), который, возможно, нуждается в дальнейшей модификации.

Некоторый фрагмент вашего кода в конечном итоге должен будет занятьПользователь вводит и решает, какую реализацию оплаты использовать.Обычно это делается с помощью фабричного объекта , который может использовать if-else или карту или какой-либо другой способ вернуть вам правильный объект, и это «единственная ответственность» фабрики.

...