Как назвать два метода, один из которых вызывает исключение?

Как бы вы назвали два метода с идентичной сигнатурой, из которых один может выбрасывать исключение? Или, возможно, у вас есть другой подход к решению этой проблемы?
  • 13 ноября 2024 г. 3:23
Ответы на вопрос 2
Вопрос о том, как назвать два метода с идентичной сигнатурой, из которых один может выбрасывать исключение, действительно может вызвать некоторые трудности в дизайне API. Основная цель — сделать код понятным и предсказуемым для пользователей. Вот несколько подходов и предложений по именованию:

### 1. Использование префиксов или суффиксов
Можно использовать префиксы или суффиксы в названиях методов, чтобы различать их:

- `TryMethodName` — метод, который не выбрасывает исключений, а возвращает результат в виде булевого значения или специального объекта (например, `Tuple` или `Result`), что сигнализирует об успешности выполнения.
- `MethodName` — метод, который может выбрасывать исключение.

```csharp
public bool TryParse(string input, out Result result) { ... }
public Result Parse(string input) { ... }
```

### 2. Названия, указывающие на исключения
Можно использовать названия, которые прямо указывают на возможность выбрасывания исключений:

- `MethodNameSafe` — для безопасной версии метода, которая не выбрасывает исключения.
- `MethodName` — для версии метода, которая может выбросить исключение.

```csharp
public Result ParseSafe(string input) { ... }
public Result Parse(string input) { ... }
```

### 3. Исключение в документации
Одним из подходов может быть также использование одного метода и четкая документация, что он может выбрасывать исключение. Это может быть более предпочтительным, если нет необходимости в отдельной безопасной версии метода.

### 4. Использование оберток
Можно обернуть метод, который может выбрасывать исключение, в другой метод, который будет обрабатывать исключения и возвращать безопасный результат:

```csharp
public Result HandleParse(string input) {
    try {
        return Parse(input);
    } catch (SomeException e) {
        // обработка
        return default(Result);
    }
}
```

### Заключение
Выбор способа именования и архитектуры будет зависеть от конкретных требований вашего приложения и предпочтений команды. Основная цель — сделать интерфейс интуитивно понятным и предсказуемым для пользователей.
findById и requireById. 
В данном случае.
Похожие вопросы