Разработка многоуровневого приложения для использования индикатора выполнения - PullRequest
1 голос
/ 13 декабря 2010

У меня есть многоуровневое приложение на c #, которое должно выполнять задачи с базой данных (при первом использовании мы можем создать базу данных и заполнить ее некоторыми данными).Когда я изначально проектировал приложение, я не учитывал возможное управление индикатором выполнения, не говоря уже о каких-либо отчетах о ходе выполнения.Как я могу изменить дизайн приложения, чтобы иметь возможность сообщать о ходе выполнения операций с базой данных на уровне пользовательского интерфейса?Есть ли какое-то решение, которое можно использовать повторно и которое не заставляет меня изменять все мои функции, чтобы получать дополнительные входные данные для отчетности?

Ответы [ 3 ]

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

Как сказал Грег, впереди много работы.Однако существует множество способов решения проблемы, и наилучший для вас вариант зависит от того, какая контекстная информация уже передается от клиента на уровни приложения / базы данных.Например, если токен сеанса или идентификатор транзакции передаются от клиента приложению в ходе обычного выполнения запроса / транзакции или ссылка подтверждения передается асинхронно обратно из приложения клиенту, то для тех запросов / транзакций, для которыхотчеты о ходе работы были необходимы, чтобы приложение могло обновить таблицу состояния, которую клиент мог запросить.Это может уменьшить количество необходимых переделок.По сути, вам необходимо учитывать уже существующее «промежуточное ПО» и посмотреть, можно ли использовать что-либо из этого для корреляции транзакций между уровнями.

0 голосов
/ 13 декабря 2010

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

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

Изменить: Я думаю, тот же подход будет работать для задач, которые имеют место в клиенте. Но, тем не менее, здесь также может быть использован класс статического индикатора прогресса.

0 голосов
/ 13 декабря 2010

Нет. В зависимости от того, насколько велико ваше приложение, у вас впереди много работы.

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

Хорошее место для начала было бы изучить использование BackgroundWorker (здесь приведен пример для MSDN - http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx). Когда вы ознакомитесь с BackgroundWorker, вы сможете лучше понять, какие изменения вы нужно внести в ваше приложение.

...