Шаблон проектирования C # ProgressBar - PullRequest
1 голос
/ 03 июня 2010

Я работаю над приложением для обновления базы данных. Программа обновления обновляет схему базы данных (добавляет новые столбцы, переименовывает столбцы, добавляет новые таблицы, новые представления в существующую базу данных, выполняя операторы SQL). Когда пользователь хочет обновить версию 1.0 до 2.0, объекты «Upgrader» берутся из фабрики объектов и вызывается метод «Execute» для каждого «Upgrader». Графический интерфейс приложения имеет индикатор выполнения, и каждый раз, когда объект средства обновления выполняет оператор SQL, индикатор выполнения увеличивается.

            while (!version.Equal(CurrentVersion))
            {

                 IUpgrader myUpgrader = UpgraderFactory.GetUpgrader(version);

                 myUpgrader.Execute(UpgradedFile,progressbar);

                 version.Increment();
            }

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

С уважением, Себ

Ответы [ 2 ]

3 голосов
/ 03 июня 2010

Я бы, вероятно, собрал интерфейс для операций индикатора выполнения (пример C #):

interface IProgressBar
{
     int MinValue { get; set; }
     int MaxValue { get; set; }
     int Value { get; set; }
}

Тогда я бы заставил объект Upgrader принять параметр этого типа интерфейса. Наконец, я хотел бы создать класс, который реализует интерфейс, и который также содержит ссылку на компонент индикатора выполнения, который он использует для визуализации прогресса.

Таким образом, у вас не будет тесной связи между модернизаторами и визуализацией прогресса.

1 голос
/ 19 декабря 2010

Для реализации я бы добавил ProgessEvent в IUpgrader, который подается из программы обновления. Графический интерфейс может добавить списки событий к этому событию и соответствующим образом обновить панель progessbar.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...