#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); } } }
Комментариев нет:
Отправить комментарий