Страницы

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

понедельник, 24 февраля 2020 г.

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

#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 { List actions=new List() public void Run() { foreach(var action in actions) { action.Execute(); this.ResearchProgress(action.weight); } } }

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

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