Я знаю, что это не тот ответ, который вы ищете, но не комментируйте вообще. Если ваш код недостаточно ясен, чтобы его можно было оставить без комментариев, вам следует рефакторинг до тех пор, пока он не станет. Джеффри Палерм o только что написал сообщение в блоге , в котором говорится лучше всего.
Как правило, комментарии имеют тенденцию документироваться либо:
- Код слишком компактный. Вещи, которые выглядят так:
++i?--g:h-i;
- Длинные блоки кода, которые необходимо суммировать
- Код, который является одноразовым или не имеет четкой причины для существования
См. Ниже упрощенный пример некоторых простых комментариев к вашему блоку исключений и версию, которая устраняет необходимость в комментариях.
bool retries = 0;
while (retries < MAX_RETRIES)
{
try
{
... database access code
break;
}
// If under max retries, log and increment, otherwise rethrow
catch (SqlException e)
{
logger.LogWarning(e);
if (++retries >= MAX_RETRIES)
{
throw new MaxRetriesException(MAX_RETRIES, e);
}
}
// Can't retry. Log error and rethrow.
catch (ApplicationException e)
{
logger.LogError(e);
throw;
}
}
Хотя приведенные выше комментарии способствуют возможности повторного использования, вам, по сути, необходимо поддерживать как код, так и комментарии. Это возможно (и предпочтительно) реорганизовать, чтобы оно было понятнее без комментариев.
bool retries = 0;
while (canRetry(retries))
{
try
{
... database access code
break;
}
catch (SqlException e)
{
logger.LogWarning(e);
retries = incrementRetriesOrThrowIfMaxReached(retries, e);
}
catch (ApplicationException e)
{
logger.LogError(e);
throw;
}
}
...
private void incrementRetriesOrThrowIfMaxReached(int retries, Exception e)
{
if (++retries >= MAX_RETRIES)
throw new MaxRetriesException(MAX_RETRIES, e);
return retries;
}
private bool canRetry(int retries)
{
return retries < MAX_RETRIES;
}
Последний пример может показаться большим количеством кода для очень тонкой выгоды, но выгоды невозможно переоценить. Код также понятен, но у вас есть то преимущество, что вам не нужно иметь отдельный набор метаданных (комментариев) для объяснения кода. Код объясняет сам. Если ваш блок кода перехвата слишком длинный и нуждается в комментариях для подведения итогов, подумайте о рефакторинге его в отдельный метод, чтобы улучшить читабельность.