Closed marcelohnq closed 7 months ago
O princípio Open-Closed foi aplicado. Não é mais necessário realizar mudanças na classe OrderService
para expandir novas formas de pagamento. Foram criada a classe PaymentBase
e as classes Pix
, CreditCard
e Paypal
, que estende a PaymentBase
e cada uma realizando sua forma de pagamento específica. Além disso, para saber qual classe deve ser instanciada, é definida em Payment/PaymentMethod.cs
:
public static PaymentBase Get(PaymentMethod pm, decimal paymentValue) => pm switch
{
PaymentMethod.Pix => new Pix(paymentValue),
PaymentMethod.Creditcard => new Creditcard(paymentValue),
PaymentMethod.Paypal => new Paypal(paymentValue),
_ => throw new ArgumentException("The payment method does not exist.")
};
Portanto, para adicionar uma nova forma de pagamento, deve ser criado uma nova classe, que estende PaymentBase
, e adicionar novo tipo em PaymentMethod.cs
.
Essa API cria o pagamento de uma compra (PlaceOrder). Verifique o método PayOrder da classe OrderService. Você deve ter percebido que existem diversas formas de pagamento (Pix, cartão de crédito, paypal), certo? Essa classe, no entanto, é problemática. Imagine que teríamos que incluir um novo método de pagamento, seria mais um if na estrutura.
Você precisa:
Faça uma alteração na arquitetura para que fique mais bem estruturado e preparado para o futuro. Tenha certeza que o princípio Open-Closed será respeitado.