我应该使用响应对象还是 属性 来返回响应
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;
}
}
我们想扩展要求以从提供者处取回响应。现在,为了实现这个,我可以想到两种方法。
- 创建一个
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; }
}
- 添加 getter 属性 并从提供者具体 类 中填充它。调用代码将选择提供程序的实例并可以访问此 属性。方法的 return 类型不变。
public interface IProvider
{
Task<bool> SendAsync(ProviderRequest providerRequest);
string ProviderResponse { get; }
}
我应该选择哪种设计?使用这些设计解决方案的最佳场所在哪里?
似乎第一种方法看起来更有效。
- 线程安全
- 我们可以创建一个单例对象并保存多个对象创建
- 在响应对象中扩展:
- 如果我们希望将来从 Response 中获得更多参数,我们可以在对象中创建一个 属性。在第二种方法中,我们必须污染接口以添加更多参数。
- 在接口中扩展:
- 假设
IProvider
还需要一个函数来公开它具有不同的响应和不同的参数。然后在第二种方法中 IProvider
成为设计问题,ProviderResponse
输出负责哪个功能。
总的来说,第一种方法在线程安全、设计、性能和可扩展性方面看起来更有效。
我有一个要求,我需要向我们的客户发送短信。对于发送 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;
}
}
我们想扩展要求以从提供者处取回响应。现在,为了实现这个,我可以想到两种方法。
- 创建一个
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; }
}
- 添加 getter 属性 并从提供者具体 类 中填充它。调用代码将选择提供程序的实例并可以访问此 属性。方法的 return 类型不变。
public interface IProvider
{
Task<bool> SendAsync(ProviderRequest providerRequest);
string ProviderResponse { get; }
}
我应该选择哪种设计?使用这些设计解决方案的最佳场所在哪里?
似乎第一种方法看起来更有效。
- 线程安全
- 我们可以创建一个单例对象并保存多个对象创建
- 在响应对象中扩展:
- 如果我们希望将来从 Response 中获得更多参数,我们可以在对象中创建一个 属性。在第二种方法中,我们必须污染接口以添加更多参数。
- 在接口中扩展:
- 假设
IProvider
还需要一个函数来公开它具有不同的响应和不同的参数。然后在第二种方法中IProvider
成为设计问题,ProviderResponse
输出负责哪个功能。
- 假设
总的来说,第一种方法在线程安全、设计、性能和可扩展性方面看起来更有效。