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

时间:2015-06-20 15:07:31

标签: c# .net design-patterns architecture

要求:

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

当前系统:

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

问题

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

1 个答案:

答案 0 :(得分:0)

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

例如,要创建付款,您可能拥有PaymentCardDetails模型,AddressModel等。您的界面将具有MakePayment或类似方法,例如:

public MakePaymentResponse MakePayment(PaymentCardDetails cardDetails, AddressModel address);

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

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

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

public class Payment {

    private readonly IPaymentGateway _paymentGateway;

    public Payment(IPaymentGateway paymentGateway) {
        _paymentGateway = paymentGateway;
    }

    public MyMethod() {
        //get your models prepared etc.
        _paymentGateway.MakePayment(cardDetails, addressDetails);
    }