#c_sharp
Есть некая операция, которое состоит из последовательности действий.
void MyOperation
{
Action1();
Action2();
Action3();
}
Потребовалось повесить на это просмотр текущего прогресса. Причем на случай изменения
действий (добавления, удаления, изменения цены действия), управление прогрессом не
должно быть сложным и требовать пересчеты на калькуляторе.
void MyOperation
{
[CostAttribute(30)]
Action1();
[CostAttribute(40)]
Action2();
[CostAttribute(30)]
Action3();
}
А в самих функциях должен посчитаться общий прогресс (30 + 40 + 30) и текущий для
действия (общий/текущий).
То есть если программист добавляет новое действие (Action4), он примерно оценивает,
сколько оно будет выполняться и выставляет свою цену, например 100, не меняя остальные
цены и соотношения.
Как такое можно сделать?
UPD:
Сначала мне пришло в голову сделать так. Поставить атрибут с ценой над каждым определением
действия. Но действие может иметь разную цену в зависимости от контекста. Например,
действие копирует файлы. В этом случае оно может использоваться в операции несколько
раз, и цена его будет разная. Программист примерно представляет, сколько файлов имеется
для копирования, а потому в одном случае это действие будет стоить 10 (примерно 1000
файлов), а в другом - 20 (примерно 2000 файлов). Короче не знаю как это сделать красивее
и удобнее в понимании и программировании.
Ответы
Ответ 1
Как вариант, можно обернуть MyOperation и Action в классы. В этом случае MyOperation хранит набор Action и выполняет их поочередно. После выполнения действия можно пересчитать прогресс выполнения, используя параметр action.Weight (он же цена). public class MyOperation { Listactions=new List () public void Run() { foreach(var action in actions) { action.Execute(); this.ResearchProgress(action.weight); } } }
Комментариев нет:
Отправить комментарий