代码之家  ›  专栏  ›  技术社区  ›  Peter D

这种情况下的异常处理模式?

  •  2
  • Peter D  · 技术社区  · 15 年前

    我有两个来自两个不同公司的API,它们允许我与他们的服务器通信以处理事务。我的任务是为这些API创建一个通用接口。我想出了这样的办法:

    IServiceProvider <- ServiceProvider <- CompanyAServiceProvider
    IServiceProvider <- ServiceProvider <- CompanyBServiceProvider
    

    在里面 CompanyAServiceProvider 我正在使用他们提供的API与远程服务器进行接口。来自A公司的API抛出与B公司完全不同的异常。

    我可以在本地处理异常,但我认为这并不适合这种情况。

    public String purchase(String amount) {
      try {
        request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
      } catch ( InitializationException e ) {
        //do something.
      }
    }
    

    public String purchase(String amount) throws Exception {
      request = new Request( RequestIF.NEW_ORDER_TRANSACTION );
    }
    

    然后让打电话的人来处理 Exception 不管异常是什么,也不管API抛出了什么。

    当我处理两组不同的抛出异常时,如何为两个不同的API编写接口并使其保持通用性。我处理得对吗?最好的选择是什么?

    3 回复  |  直到 15 年前
        1
  •  14
  •   akarnokd    15 年前

    在本例中,我创建了自己的异常子类并只包装实际的异常。然后,我的API只公开我的异常。

        2
  •  3
  •   Sheldon White Sheldon White    15 年前

    考虑一下在调用函数的级别上处理的抽象级别。想必你不想透露你正在与之打交道的个别公司的细节,而更愿意处理更一般的概念,如订单、采购交易等。

        3
  •  1
  •   akf    15 年前

    处理这个问题的另一个原因 Exception 在当地进行,并在必要时将其滚到下游:

    当特定类型的事件发生时,可能需要执行一些工作(清理、重试等) 例外 根据供应商的不同而抛出。