Задача состоит в поэтапной обработке получаемых данных и, при успешной обработке, формировании результата.
Есть ли более читабельные варианты оформления кода решения подобных задач?
Действия по инициализации...
try {
do{
... операция 1я ...
если сбой, то с Id=..; continue;
... операция 2я ...
если сбой, то с Id=..; continue;
... операция Nя ...
если сбой, то с Id=..; continue;
Ура, все прошло замечательно
... передача результата работы ...
} while (false);
} catch (Exception ex){
сбой с Id = ...failUnknown;
}
Действия по деинициализации...
Здравствуйте, m_nikolay, Вы писали:
_>Задача состоит в поэтапной обработке получаемых данных и, при успешной обработке, формировании результата.
_>Есть ли более читабельные варианты оформления кода решения подобных задач?
Для начала выдели код занимающийся обработкой в отдельный метод. Тогда точно не понадобиться GOTO или его сурогат в видк do{}while(true).
_>Задача состоит в поэтапной обработке получаемых данных и, при успешной обработке, формировании результата.
Одним из вариантов решения вашей задачи является следующий.
Пусть вся информация, необходимая для обработки, находится в объекте класса OperationContext.
public interface IOperation
{
void Perform(OperationContext context);
int Id { get; }
}
public class OperationManager
{
private IOperation [] operations;
public OperationManager(params IOperation [] operations)
{
this.operations = operations;
}
public void Perform(OperationContext context)
{
foreach (IOperation operation in operations)
{
try
{
operation.Perform(context);
}
catch (Exception ex)
{
throw new OperationException(operation.Id, ex);
}
}
//Здесь передаем результаты выполнения куда надо
}
}
Код, в котором нам надо будет обработать данные, будет выглядеть так:
OperationManager manager = new OperationManager(new Operation1(),
new Operation2(),
new Operation3());
...
manager.Perform(context);
_>реализовывать класс ради 3 строчек код, imho уже слишком.
А что кол-во строк в классе влияет на скорость?
Или может у нас стоит лимит на кол-во классов в проекте?
уж кол-во строк в классе это последнее на что стоит смотреть.
вернее я бы скорее согласился на выражение "кол-во строк в методе", но не в классе.
Здравствуйте, valmond, Вы писали:
V>А что кол-во строк в классе влияет на скорость? V>Или может у нас стоит лимит на кол-во классов в проекте? V>уж кол-во строк в классе это последнее на что стоит смотреть. V>вернее я бы скорее согласился на выражение "кол-во строк в методе", но не в классе.
Считаю, что добавление в проект классов, функциональность которых, состоящая из единственного метода обрабатывающего и изменяющего данные "базового класса", может быть реализована в методах "базового класса", imho приведет к усложнению читабельности кода (см тему сообщения).
Безусловно, для задач связанных со сложной/длительной/логически завершенной обработкой данных, реализация класса видится более целесообразной.
Здравствуйте, m_nikolay, Вы писали:
_>Задача состоит в поэтапной обработке получаемых данных и, при успешной обработке, формировании результата.
_>Есть ли более читабельные варианты оформления кода решения подобных задач?
private IdType GetId ()
{
try {
... операция 1я ...
если сбой, то return Id1;
... операция 2я ...
если сбой, то return Id2;
... операция Nя ...
если сбой, то return Id3;
Ура, все прошло замечательно
... передача результата работы ...
return Id_Ok;
} catch (Exception ex){
return Id_failUnknown;
}
}