У меня есть процесс, который анализирует файл XML.
Это происходит в классе PAckage.
В классе Package есть Делегат, который устанавливает недопустимое состояние объекта и фиксирует подробную информацию об ошибке, произошедшей в классе Package
Для простоты я показываю filitem, передаваемый в пакет ..
Т.е. `
foreach( var package in Packages)
{
try
{
package.ProcessXml(fileitem.nextfile);
}
catch (CustomeErrorException ex)
{
Logger.LogError(ex)
}
}
Внутри пакета мои проверки выглядят примерно так
var Album = xml.Descendants()
.Select(albumShards => new Album {
Label = (string)albumShards.Descendants(TempAlbum.LabelLoc).FirstOrDefault() == "" ?
FailPackage("Error on label Load",Componets.Package,SubComp.BuildAlbum ) : (string)albumShards.Descendants(TempAlbum.LabelLoc).FirstOrDefault()
В этой проверке я проверяю, возвращено ли "" для метки ... если так, то вызовите Failpackage с информацией об ошибке и создайте исключение
protected override void FailPackage(string msg, LogItem logItem)
{
Valid = ProcessState.Bad;
Logger.LogError(msg,logItem);
throw CustomErrorException(msg, Logitem);
}
, который захватывается с помощью блока try catch
Меня беспокоит то, что я использую исключения для выполнения программы ... как еще я должен смотреть на решение этой проблемы или это правильный шаблон.