用我的界面返工

本文关键字:界面 我的 | 更新日期: 2023-09-27 18:27:19

我有一个接口,它有5个方法。

 public interface IPhoneAccountTransfer
{
    BalanceInfo[] GetInmateAccountBalance();
    AuthorizationCallConfirmation GetAuthorizeCallResult();
    ChargeAuthorizationConfirmation CommitChargeAuthorization(string authCode);
    ChargeAuthorizationConfirmation CancelBalanceTransfer(string authorizationToken);
    VerifyAuthorizationConfirmation VerifyAuthorization();
}

问题是,我有不同的供应商的电话帐户转移。现在,在我的方法中,返回类型与一个第三方相关联。

例如。

public partial class BalanceInfo
{
    private BalanceType typeField;
    private decimal amountField;
    public BalanceType Type
    {
        get
        {
            return this.typeField;
        }
        set
        {
            this.typeField = value;
         }
      }

和:

public enum BalanceType
{
     Available,
     Phone,
     Commissary,
     Account,
     Debt,
     Held,
 }

比如说,我想保留五种实现方法。我可以使这些方法通用吗?

用我的界面返工

创建自己的自定义返回类型:

public interface IPhoneAccountTransfer
{
    YourCustomBalanceInfo[] GetInmateAccountBalance();
    YourCustomAuthorizationCallConfirmation GetAuthorizeCallResult();
    YourCustomChargeAuthorizationConfirmation CommitChargeAuthorization(string authCode);
    YourCustomChargeAuthorizationConfirmation CancelBalanceTransfer(string authorizationToken);
    YourCustomVerifyAuthorizationConfirmation VerifyAuthorization();
}

并将第三方响应转换为您自己的已知类型。

下面是一个实现示例:

public YourCustomVerifyAuthorizationConfirmation VerifyAuthorization()
{
    VerifyAuthorizationConfirmation res = DoLogic();
    YourCustomVerifyAuthorizationConfirmation yourWrappedRes = MapResponse(res);
    return yourWrappedRes;
}

我可以使这些方法通用吗?

当然可以,但是您希望每个返回类型都是泛型的吗?如果是这样的话,那么您就必须拥有五个通用参数。这将为您提供编译时的安全性,但会增加使用的复杂性。

有很多细节需要推断,但听起来你有几个选择:

  1. 使用您现在拥有的当前退货类型作为基类和退货供应商特定的类。
    • 不同供应商的类型有多相似?他们是否有许多共同的属性,只是有一些差异
    • 一个缺点是必须在客户端中强制转换返回类型才能使用其非标准属性
  2. 使用覆盖所有已知供应商的"通用"返回类型,并且只填充与特定供应商相关的字段
    • 这里的主要好处是,当您使用特定于供应商的字段时,不必强制转换
  3. 对每个供应商使用不同的方法
    • 这可能意味着你不能使用一个接口(至少不能用于那些方法),但对于不同的返回类型,一个接口可能无论如何都不是正确的解决方案