В настоящее время я разрабатываю систему, которая обрабатывает различные типы файлов. Я определил следующий интерфейс
public interface IFileProcessor
{
bool ProcessFile(string fileContents)
}
с целью создания ряда конкретных реализаций для обработки файлов различных типов. Класс контроллера будет отвечать за:
- Просмотр папки для вновь добавленного файла
- Чтение содержимого файла
- Получение коллекции этих конкретных реализаций IFileProcessor
- Один за другим вызовите ProcessFile () для каждого компонента, передавая содержимое файла
- Если компонент не может обработать файл, он возвращает false, в противном случае он обработает содержимое и вернет true
- Если реализация IFileProcessor не может обработать файл, он перемещается контроллером в папку «UnProcessed»
- Если компонент успешно обрабатывает файл, он перемещается в папку «Обработано»
- Если компонент создает исключение, он перемещается в папку «Failed»
Я создаю реализацию IFileProcessor, которая сначала проверит, может ли он обработать файл на основе типа (например, csv), а затем выполнит некоторую проверку верхнего уровня (то есть проверит заголовки файлов). Если любая из этих проверок завершится неудачей, исключение будет выдано контроллеру, поскольку весь файл считается недействительным.
Однако, когда проверка верхнего уровня прошла успешно, компонент будет обрабатывать каждую строку в файле. С этого момента допустимо, что отдельная строка не проходит обработку (то есть проверку), а остальная часть процесса продолжается.
Вот в чем проблема, мне интересно, лучше ли регистрировать, что произошли ошибки валидации, а затем выдать исключение в конце процесса, или изменить сигнатуру ProcessFile (), чтобы она возвращала перечисление (одно из Обработано, необработано, обработано с ошибками)?
Из того, что я прочитал, кажется, что исключения являются предпочтительным маршрутом по сравнению с кодами состояния, однако в данном конкретном случае, когда процесс может продолжаться, кажется неправильным использовать искусственное исключение в конце, чтобы утверждать, что процесс не завершен на 100%. .
Мне было бы очень интересно узнать мнение людей по этому поводу.