要求:
我要求与多个支付网关集成。但是,客户端仅使用其中一个可用,并使用管理员设置进行配置。
当前系统:
我已经为每个支付网关编写了一个库。随着网关集成请求(来源)的增加,这会产生维护噩梦并可能增加项目。
问题
有人可以建议我在这种情况下使用的设计模式,可以创建接口和常用设置,并根据需要实现网关,减少重复代码吗?
答案 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);
}