Что бы наилучшей практики для обработки исключительных ситуаций, когда это приходит к реализации этого интерфейса, используя стандартные классы .NET из пространств имен System.IO (например, FileInfo, DirectoryInfo, Directory, File и т. д.)?
Лучше всего, насколько я обеспокоен тем, чтобы позволить исключения бурлит. Как разработчик «рамки», вы не можете знать, каково будет намерение - обработка исключений для пользователя вашего API. И поскольку вы не знаете намерений этого пользователя, предпочтительно, чтобы исключение было выбрано.
- Позволяя исключение кипящего, вы позволяете получить полную трассировку стеки, где исключение на самом деле произошло
- Вы также позволяете обрабатывать исключения один хочет, чтобы поймать на основе одного контекста
, основанные на Eric Lippert «s блоге, Vexing Exceptions который я не могу больше не найти, я помню, как он говорил, что лучше, чтобы увидеть код, как:
if (condition) throw new Exception("message");
чем видеть:
try { something(); }
catch (Exception ex) { throw new Exception(); }
Поскольку трассировки стека должны быть сброшены каждый раз, когда исключение вызвано повторно. Или же вы можете:
try { something(); }
catch (Exception ex) {
handleTheExceptionInternallyForYourPurpose();
throw ex; // simply let the exception flow go its way to the top, to the caller.
}
Плюс все зависит от ваших ожиданий в отношении поведения. Предположим, вы не хотите разрешать нулевые значения как параметр path
, тогда вам может потребоваться сбросить ArgumentNullException
, когда это так.
public void CreateDirectory(string path) {
if (path == null) throw new ArgumentNullException("path");
if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("path");
// create your directory here based on the path provided...
}
Как я могу сделать эту библиотеку надежным и простым для использования клиентского кода?
Моя ставка заключается в том, что вы не можете программировать для других программистов. У вас может быть лучшая библиотека в мире, с меньшим опытом или без уважения. SRP может закончиться грязным кодом. Каждому программисту принадлежит ряд руководящих принципов и соблюдение лучших практик и принципов. К сожалению, эти принципы редко соблюдаются, по крайней мере, в моем уголке мира. Что бы вы ни делали, почти всегда будет лучший способ делать вещи в зависимости от вашего контекста.
Как я могу сделать это так, чтобы клиент код для обработки ошибок является чистым и не слишком сложным?
комплекс материал всегда будет сложным для кода, так что нет никакого способа, чтобы избежать. Придерживаясь принципов SOLID и применяя лучшие практики завтрашнего дня, у вас будет простая и понятная библиотека.
XML Comments также являются хорошим способом пойти, когда дело доходит до библиотек, так что IntelliSense может отображать его при наборе текста.
https://github.com/aspnet/FileSystem – SLaks
Что такое четкая и не сложная обработка ошибок? – Reniuz
@reniuz: Я ожидал, что комментарий ... Не уверен, действительно, и я не могу дать точное определение и надеюсь, что в сообществе есть определенный консенсус. Например. для меня одна вещь будет писать клиентский код с небольшим количеством блоков try/catch ... возможно, попробуйте блокировать не более одного или двух блоков catch ... Слишком много try/catchs загромождают код. Например. когда я делаю CopyFile() Я бы хотел, чтобы в InnerException, возможно, был только один тип исключений с более подробной информацией. Не уверен, что это правильный подход, но для меня это значит для меня в настоящее время. – matori82