[英]Replaceable 3rd party services
我们正在重构和升级严重依赖第三方集成服务的系统。 问题在于,客户端非常频繁地更改服务提供商,例如从一个SMS服务提供商更改为另一个。 每个提供程序都有不同的API,它们具有不同的参数和方法,什么是使切换更轻松的最佳方法?
我们已经尝试为所有第三方服务创建一个统一的接口,该接口允许预定义每个第三方服务包装程序应实现的一组方法,但是问题是不同的服务具有不同的参数和返回值。
我们还试图使所有方法都接受一个参数-一个实现接口IArgs的类,然后另一个实现ISmsService的适配器类,该适配器将args强制转换为所需的类型并将其传递给服务包装器类。 但是有太多的开销,因为您需要为每个方法创建一个args类。
// common interface
public interface ISmsService
{
Task<int> Send(string phoneNumber, string text);
}
//external rest service1 wrapper class
public class SmsService1 : ISmsService
{
public int Send(string text, string phoneNumber)
{
//call rest endpoint here
}
}
// external rest service 2 wrapper class
public class SmsService2
{
public string Send(int clientId, string countryCode, string phoneNumber, string text)
{
//call rest endpoint here
}
}
//actual service call
this._smsService.Send("123456789", "Hello");
//switch to
this._smsService.Send(12, "21", "123456789", "Hello");
实施这种方法的正确方法是什么?
声明的字段_smsService
应该是声明的接口的类型: ISmsService
,使用依赖注入进行实例化可以使您的生活更轻松。
然后,调用者始终调用this._smsService.Send("123456789", "Hello");
所有必需的参数必须由适当的实现加载,以便从配置中在构造函数内部进行检查。 这样,每个包装器都具有具有相同签名的Send
方法,并且所有提供程序特定的参数都对调用方隐藏。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.