我应该使用响应对象还是 属性 来返回响应

Should I use response object or property for returning response

我有一个要求,我需要向我们的客户发送短信。对于发送 SMS,我们有多个提供商。为此,我设计了一个接口,并通过实现这个接口

为提供者创建了不同的类
public interface IProvider
{
     Task<bool> SendAsync(ProviderRequest providerRequest);
}

public class Provider1: IProvider
{
     public async Task<bool> SendAsync(ProviderRequest providerRequest)
     {
          //call provider1
          return somethingBool;
     }
}
public class Provider2: IProvider
{
     public async Task<bool> SendAsync(ProviderRequest providerRequest)
     {
          //call provider2
          return somethingBool;
     }
}

我们想扩展要求以从提供者处取回响应。现在,为了实现这个,我可以想到两种方法。

  1. 创建一个 ProviderResponse 对象并将响应映射到它和 return。
public interface IProvider
{
     //Updated interface method just to be concise, this will be a new version of the method 
     Task<ProviderResponse> SendAsync(ProviderRequest providerRequest);
}
// response class
public class ProviderResponse
{
    public bool IsSuccess { get; set; }
    public string ProviderResponse { get; set; }
}
  1. 添加 getter 属性 并从提供者具体 类 中填充它。调用代码将选择提供程序的实例并可以访问此 属性。方法的 return 类型不变。
public interface IProvider
{
     Task<bool> SendAsync(ProviderRequest providerRequest);
     string ProviderResponse { get; }
}

我应该选择哪种设计?使用这些设计解决方案的最佳场所在哪里?

似乎第一种方法看起来更有效。

  1. 线程安全
    • 我们可以创建一个单例对象并保存多个对象创建
  2. 在响应对象中扩展:
    • 如果我们希望将来从 Response 中获得更多参数,我们可以在对象中创建一个 属性。在第二种方法中,我们必须污染接口以添加更多参数。
  3. 在接口中扩展:
    • 假设IProvider 还需要一个函数来公开它具有不同的响应和不同的参数。然后在第二种方法中 IProvider 成为设计问题,ProviderResponse 输出负责哪个功能。

总的来说,第一种方法在线程安全、设计、性能和可扩展性方面看起来更有效。