处理catch块中可重用代码的最佳方法

时间:2019-05-08 13:00:36

标签: exception try-catch

我正在API应用程序中编写请求处理程序。该应用程序通过HTTP与许多(微)服务进行通信。因此,我为每个服务(示例代码中的AuthService,LogService,DatabaseService)编写了一个类,该类带有方法(示例代码中的Login,TryLog,GetPets),当通信失败时会抛出ServiceException。

在我的请求处理程序方法中,我调用这些方法并在引发异常时捕获这些异常。

示例代码:

public override async Task HandleRequest()
{
    try
    {
        AuthService.Login(this._Token);
    }
    catch (ServiceException se)
    {
        // specific code
        LogService.TryLog("Signing in failed");

        // shared code
        LogService.TryLog("Handling request failed.");
        this.Respond(HttpStatusCode.InternalServerError);
        return;
    }

    try
    {
        this._Pets = DatabaseService.GetPets(kind: "dog");
    }
    catch (ServiceException se)
    {
        // specific code
        LogService.TryLog("Getting pets failed");

        // shared code
        LogService.TryLog("Handling request failed");
        this.Respond(HttpStatusCode.InternalServerError);
        return;
    }

    this.Respond(HtppStatusCode.OK, this._Pets);
}

如您所见,在每个catch块中,我需要执行该catch块特有的一些代码,以及对所有catch块完全相同的代码。

  

重用此类代码的最佳/推荐方式是什么?

我想到的选项:

  • 保持本地捕获异常,将“共享”代码移至方法中,并在每个异常中调用该方法。
  • 停止在本地捕获异常,在捕获所有ServiceException的“ HandleRequest”方法中添加一个“全局” try / catch,将Action / delegate方法传递给处理唯一情况的每个服务方法,但执行后仍会抛出ServiceException该代码。

0 个答案:

没有答案