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

标签 c# .net design-patterns architecture

要求:

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

当前系统:

我为每个支付网关分别编写了一个库。随着网关集成请求(源)的增加,这造成了维护噩梦和项目的潜在增加。

问题

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

最佳答案

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

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

public MakePaymentResponse MakePayment(PaymentCardDetails cardDetails, AddressModel address);

那么您的每个支付网关都应该使用自己的实现来实现此接口(interface)。

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

在代码中使用支付网关的方法中,您将使用构造函数注入(inject)在接口(interface)中传递,您的 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);
    }

关于c# - 用于多个支付网关的最佳模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30955462/

相关文章:

C# - 查找输出

c# - 基于推和基于拉的结构(如 IEnumerable<T> 和 IObservable<T>)之间有什么区别

c# - 检索Excel工作表单元格值

c# - 无法添加对 microsoft.office.interop.excel 的引用

c# - 存储库模式

design-patterns - 存储库类中要放入多少内容?

c# - 每当在 C# 中调用一个方法时,是否有一种通用的方法来调用另一个方法

c# - 命令模式 - 目的?

c# - 最好的免费自动更新器 c#

c# - 在 C# 中实现响应式编程/函数