Страницы

Поиск по вопросам

вторник, 7 мая 2019 г.

Как лучше всего рассчитывать прогресс выполнения и задавать его цену?

Есть некая операция, которое состоит из последовательности действий.
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 файлов). Короче не знаю как это сделать красивее и удобнее в понимании и программировании.


Ответ

Как вариант, можно обернуть MyOperation и Action в классы. В этом случае MyOperation хранит набор Action и выполняет их поочередно. После выполнения действия можно пересчитать прогресс выполнения, используя параметр action.Weight (он же цена).
public class MyOperation { List actions=new List()
public void Run() { foreach(var action in actions) { action.Execute(); this.ResearchProgress(action.weight); } } }

Комментариев нет:

Отправить комментарий