用于多个支付网关的最佳模式

本文关键字:最佳 模式 网关 用于 | 更新日期: 2023-09-27 17:57:11

要求:

我需要与多个支付网关集成。但是,客户端仅使用其中一个可用,并且使用管理员设置进行配置。

当前系统:

我为每个支付网关编写了一个库。这会造成维护噩梦,并且随着网关集成请求(源)的增加,项目可能会增加。

问题

有人可以建议我在这种情况下使用的设计模式,可以创建接口和通用设置,并根据需要实现网关以减少重复代码?

用于多个支付网关的最佳模式

我会创建一个标准接口来处理常见操作。具有一组传递到这些方法中的域对象。

例如,要创建付款,您可能有一个付款卡详细信息模型,一个地址模型等。您的界面将具有MakePayment或类似方法,例如:

public MakePaymentResponse MakePayment(PaymentCardDetails cardDetails, AddressModel address);

然后,您的每个支付网关都应使用自己的实现来实现此接口。

然后使用 IoC(控制反转)/DI(依赖注入)根据提供的配置值决定在运行时使用哪个接口。

在代码中使用使用构造函数注入在接口中传递的支付网关的方法中,DI 框架将负责选择正确的实现。

public class Payment {
    private readonly IPaymentGateway _paymentGateway;
    public Payment(IPaymentGateway paymentGateway) {
        _paymentGateway = paymentGateway;
    }
    public MyMethod() {
        //get your models prepared etc.
        _paymentGateway.MakePayment(cardDetails, addressDetails);
    }