编写一个良好的界面来脱离特定技术...如何处理异常?

时间:2013-12-09 04:36:48

标签: java interface amazon-web-services decoupling

我想编写一个Java接口来解耦特定技术,转发异常的最佳方式是什么。让我们说我想要脱离的技术是Amazon SQS。 Amazon SQS本质上是一个队列服务,我希望尽可能灵活,我希望可以选择使用RabbitMQ或其他队列服务轻松替换SQS。

这是我到目前为止所拥有的:

public interface QueueService {

   // URL of the Queue Server
   public void setURL(String url); 
   public String getURL();

   public Msg getMessage() throws QueueServiceException;
   public void deleteMessage(String messageId) throws QueueServiceException;

}

getMessage的SQS实现可能相当简单,它只使用Amazon AWS Java SDK,实质上是AmazonSQS类的receiveMessage方法。以下是AWS Java SDK中此方法的签名:

  public ReceiveMessageResult receiveMessage(ReceiveMessageRequest receiveMessageRequest)  throws AmazonServiceException, AmazonClientException;

现在我的问题是我在QueueService接口的实现中如何处理这些异常...我是否只捕获这些异常(特定于特定技术)并重新抛出为QueueServiceException?

try {
  messages = amazonSQS.receiveMessage(receiveMessageRequest).getMessages()
} catch(AmazonServiceException ase) {
      throw new QueueServiceException();
}

QueueServiceException是:

public class QueueServiceException extends Exception {

    public QueueServiceException (String message){
        super(message);
    }

    public QueueServiceException(String message, Throwable cause){
        super(message, cause);

    }

}

有什么想法吗?

干杯!

1 个答案:

答案 0 :(得分:2)

你将不得不做exception wrapping。春天这样做。基本上捕获提供者特定的异常并重新抛出作为您的例外。