IsDatabaseUp возвращает true или бросает исключение


Я хочу написать веб ASP.NET конечную точку API, что позволяет клиентам проверить, если база данных запущена.

Ниже метод это проверить, если база данных до установки подключения и запуск фиктивную инструкцию по SQL. Если исключение выдается, база данных. Таким образом, он всегда будет возвращать true, когда нет.

public interface IDatabaseHealthStatus {
  bool IsDatabaseUp();
}

public class DatabaseHealthStatus :IDatabaseHealthStatus {

    public bool IsDatabaseUp(){

      using(var con = new SqlConnection(connectionString)
      using(var cmd= new SqlCommand("SELECT 1", con)
      {
          con.Open();
         cmd.ExecuteReader();
         return true;  //always returns true, unless exception throws
      }    
    }

}

Вызов метода выглядит, как показано ниже.

Метод действия контроллера API:

[HttpGet]
public IHttpActionResult IsDatabaseUp(){

  databaseHealthStatus.IsDatabaseUp(); //return value is ignored. Exception is handled by global exception handler, if any
  return OK();

}

Вопросы:

1: IsDatabaseUp() возвращает тип boolean, но он всегда возвращает значение истинно (не ложно), если он бросает исключение, которое может быть неоднозначным (то есть типа bool, только возвращает true, и исключения). Я не хочу, чтобы поймать исключение в методе, и возвращать false. Потому что я хочу глобальный обработчик исключений для обработки и журналов исключение. Таким образом, это делает код чище, уменьшая попробовать/catch блок. Но в этом случае, если комментарий ставится за метод, он может быть запутанным.

Это лучший способ, чтобы вернуть результат? Что вы думаете?



Комментарии
1 ответ

Соглашение о наименовании Is… предполагает, что функция является предикатом, возвращая true или false.

Если ты хотел, чтобы бросить исключение, когда база данных не работает, то можно назвать функцию RequireDatabaseUp(), возвращаясь voidвместо того, чтобы. Но это кажется глупым: почему бы просто не попробовать выполнить вместо реальной работы с SQL?

В резюме, если вы хотите предоставить функцию, единственная цель которых-определить, является ли база данных доступна, он возвращал true или false. Если вы предпочитаете, чтобы бросить исключение в случае неудачи, не беспокойтесь предоставление такой функции вообще.

4
ответ дан 31 января 2018 в 12:01 Источник Поделиться