Как сделать самый чистый код при создании отчетов о продвижении к пользователю?

Может быть, вы хотите использовать что-то вроде SQLite. взгляните на О SQLite

11
задан Chris 30 April 2012 в 07:45
поделиться

13 ответов

настройте свои задачи как поток событий и имейте прогресс отчета 'о механизме' обработки событий. Каждый экземпляр события может иметь свое собственное имя, сообщающую о прогрессе аннотацию/шаблон, и т.д. если Вы хотите пойти настолько далеко

если это - шаблон, который часто происходит, это стоит усилия для инфраструктуры. Когда Вы сделаны, применимый код мог бы посмотреть что-то как:

EventQueue tasks = new EventQueue();
tasks.Add(new TaskEvent(this.doTask1,"Foo-ing the bar"));
tasks.Add(new TaskEvent(this.doTask2,"Bar-ing the foo"));
tasks.Add(new TaskEvent(this.doTask3,"Glitching and whinging"));
...
tasks.Execute(this.ProgressEventHandler);
9
ответ дан 3 December 2019 в 05:14
поделиться

Вы могли, возможно, использовать Аспектно-ориентированное программирование и создать Аспект Прогресса?

Существует много реализаций AOP. В мире Java наиболее распространенными 2 является AspectJ и Spring (который использует или AspectJ или основанные на прокси аспекты).

3
ответ дан 3 December 2019 в 05:14
поделиться

Вы могли создать класс Задачи со свойством имени и делегатом. Поместите каждую задачу в набор, затем выполните итерации через нее, печатая сообщение и вызвав делегата к каждой задаче.

3
ответ дан 3 December 2019 в 05:14
поделиться

Это зависит, сколько конфигурации необходимо на лету, я ожидал бы, что код будет очень общим, и иметь задачи быть установкой через пружину или любой контейнер МОК.

Это все было бы в пружинной конфигурации: конфигурация xml предоставила бы объект задачи свое имя и параметры. затем добавьте эти задачи к набору и вручите тот набор taskrunner.

Бегун задачи является затем кодом, который сигнализирует об остановке, и запустите каждой задачи, но каждая задача затем является бесплатной дать определенное состояние того, как это идет. Также taskrunner будет ловить любые исключения и продолжать идти, если что-то допустит ошибку. Это могло быть сделано настраивающимся, чтобы сказать, что определенные задачи зависят от завершения других, и некоторые задачи должны остановить все, если они перестали работать.

Я не соглашаюсь, что AOP должен использоваться здесь. излишество.

2
ответ дан 3 December 2019 в 05:14
поделиться

Было бы естественно иметь создание отчетов в doTask () вызовы.
Обычно генератор отчетов был бы одиночным элементом, что все объекты, отправленные сообщения в и класс генератора отчетов, были reponsible для решения, если и где показать его - строка состояния, файл журнала, stderr и т.д.

1
ответ дан 3 December 2019 в 05:14
поделиться

Принятие шаблона в том, что Вы делаете:

  • задача журнала запускается
  • действительно определить задачу
  • конец задачи журнала

у Вас может быть класс "Задачи" (родитель для всех Ваших задач), чей делают (), метод разделяется на подклассы и автоматически регистрируется, запускаются и конец задачи.

Просто идея.

1
ответ дан 3 December 2019 в 05:14
поделиться

Я не был бы ручной код числовые части отображенных сообщений как этот (любое время, необходимо добавить или удалить действия или изменить последовательность, которую у Вас есть путаница вырезания и вклейки, чтобы сделать). Вы хотели бы любой объект, обрабатывает метод ReportProgress к самому автоинкременту, как он продвигается.

1
ответ дан 3 December 2019 в 05:14
поделиться

+1 на предложении AOP. Это - классическая озабоченность crosscutting, что AOP решил бы изящно.

1
ответ дан 3 December 2019 в 05:14
поделиться

Довольно простой и очевидный способ должен был бы создать абстрактный класс, который имеет a do() метод и краткий обзор doTask () и getName () методы:

do() {
    ReportProgress("Starting " + this.getName());
    doTask();
    ReportProgress("Finished " + this.getName());
}

Затем в Ваших задачах:

class Task1 extends Task {
    getName(){return "Task 1";}
    doTask() {
        //do stuff here
    }
}

У Вас могла затем быть Задача, которая имеет doTask () метод, который работает do() на целом наборе других задач. Это могло легко быть рекурсивно, в котором любая Задача могла бы затем выполнить много подзадач.

1
ответ дан 3 December 2019 в 05:14
поделиться

К сожалению, я думаю лучший способ сделать, это действительно зависит от деталей - по крайней мере, какой язык Вы используете. Например, в Python Вы могли использовать менеджера по контексту для обеспечения написания кода как это:

with progress_report("Task 1"):
    do_task_1()

Это могло, например, гарантировать, что "Задача 1 сделана", сообщается, даже если do_task_1 () повышает исключение. Если бы Вы хотели, то Вы могли бы обработать исключения отдельно и распечатать что-то другое как "Задача 1 отказавшая" или "Прерванная задача 1".

0
ответ дан 3 December 2019 в 05:14
поделиться

В нашем инструментарии у нас есть контроллер задачи, который управляет задачами. Задача выполняется как поток. В дополнение к типичной поддержке потока задача поддерживает методы прогресса. Одно возможное представление на прогресс является визуальным индикатором выполнения с заголовком, который относится к имени задачи и шагу в задаче. Для поддержки видимой статистики и состояния код должен выполнить случайные вызовы к методу прогресса задачи. Как правило, это сделано в для циклов, так как прогресс процента может быть оценен текущим индексом, разделенным на предел.

Контроллер задачи является полезным местом для добавления глобального управления потоком, датчиков состояния, другой статистики и рычагов измерения производительности. Некоторые многопоточные ошибки и синхронизирующие проблемы могут быть проанализированы путем исследования состояния контроллера и состояния всех задач.

0
ответ дан 3 December 2019 в 05:14
поделиться

Если бы Вы используете.NET, я предложил бы использовать Блок приложений Инжекции политики из Библиотеки Предприятия (Минимальная версия: 3.1). Я использовал подобный материал, чтобы сделать, "Возвращаются к идентификационным данным пула приложений" для веб-сайта, который был тяжел на олицетворении.

Вы могли сделать то же со своей задачей. Вы могли просто определить класс задачи с фабрикой, которые создают объект с фабрикой Объекта библиотеки Предприятия и автоматически добавляют "Прежде" и "После" сообщения к задаче. Это дало бы ТОЧНО, что Вы хотите с elegence, который требуется.

Развлекайтесь!

0
ответ дан 3 December 2019 в 05:14
поделиться

Вы могли назвать ReportProgress из doTask методов, которые могли бы заставить его выглядеть немного более чистым, вместо этого Вы просто имели бы:

doTask1();
doTask2();

Создание отчетов было бы обработано в тех методах.

Вы могли использовать AOP, но мои мозговые крики KISS!! (Сохраните Это Простым Глупый), в этом случае. Если это - просто простое представление чего-то более сложного, с которым Вы имеете дело, AOP мог быть опцией.

0
ответ дан 3 December 2019 в 05:14
поделиться
Другие вопросы по тегам:

Похожие вопросы: