Есть ли лучший способ справиться с прогрессом через диалоговое окно мастера? - PullRequest
1 голос
/ 03 сентября 2010

Я работаю над существующим диалоговым окном мастера, которое реализовано в виде элемента управления вкладками (со скрытыми вкладками). Шаги мастера определены в перечисляемом типе. Когда пользователь нажимает кнопку навигации, текущий шаг выполняется с помощью оператора switch. Каждая ветвь коммутатора заполнена дополнительной логикой ветвления (if / then / else), которая сохраняет состояние различных пользовательских вариантов и назначает следующий шаг (который не обязательно является последовательным и не обязательно совпадает со страницей вкладок, отображаемой для пользователь).

При изменении текущего шага запускается дополнительный оператор switch, который обновляет пользовательский интерфейс (изменение вкладки, включение / отключение элементов управления и т. Д.)

Как реализовано, мастер очень чувствителен к изменениям и требует много отладки. Я не могу не чувствовать, что есть лучший способ сделать это. Есть предложения?

Ответы [ 4 ]

0 голосов
/ 03 сентября 2010

Я сделал кучу волшебников в своей карьере, на разных языках. Обычно лучше всего было иметь некоторый родительский контейнер и каждый шаг в своем классе / компоненте. Механизм триггера (кнопки типа «следующий предыдущий») отправляет диспетчеру сообщение о замене содержимого в контейнере.

Сейчас я делаю еще один мастер, и на этот раз я использую компонент WPF от Actipro, и он выглядит хорошо. Просто и эффективно.

0 голосов
/ 03 сентября 2010

На данный момент моя рекомендация будет состоять в том, чтобы создать небольшое подтверждение концепции (poc), чтобы показать, что вы можете перенести мастера в его текущей форме в более хорошо спроектированную систему. Глядя на это с точки зрения разработки, я бы предложил создать документ, соответствующий тому, что видит пользователь с точки зрения имен и элементов. Кроме того, вам нужно будет записать состояние объекта при его передаче на каждую страницу, в случае, если пользователь отслеживает или делает что-то еще. Другая область, которая может помочь, - это реализовать механизм правил, такой как DROOLS, или правила JBoss в том виде, в котором он использовался последним, который я проверял Существует алгоритм, который я не могу вспомнить в то время, который действительно поможет с производительностью. Итак, резюмируем:
1) Создайте небольшой документ
2) Используйте объекты, которые имеют состояние
3) Ищите хорошие правила движка
4) Получить разрешение на все эти вещи.
Я должен добавить, я понимаю, что вы были сожжены ранее на всей вещи переписать, но это всего лишь модуль, а не все предприятие.

0 голосов
/ 03 сентября 2010

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

Как правило, я решил, что сами шаги не хранят информацию.Им также не разрешается разговаривать друг с другом.У них есть указатели на объекты модели, которые содержат информацию.Я не следую ни шаблонам MVC, ни MVP, но я держу Модель отделенной от UI довольно строго.

Каждый шаг рабочего процесса имеет метод OnEnter(bool forward) и OnExit(bool forward), который они необходимы для реализации,В них вы запрашиваете модель для обновления ваших элементов управления или наоборот.Перемещение от одного шага к другому выполняется с помощью StateEngine. Он сохраняет в стеке все выполненные шаги, а когда нажата кнопка «Назад», текущее состояние - Exit ed, а предыдущее - EnterредакторУ движка есть понятие порядка по умолчанию, поэтому большинство шагов просто просят StateEngine перейти к следующему шагу, каким бы он ни был, но если вы попросите его перейти к определенному шагу, он сделает это.

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

0 голосов
/ 03 сентября 2010

У меня недостаточно представителей, чтобы добавить комментарий, поэтому мне придется опубликовать это как ответ, которого нет! Из предыдущей публикации stackoverflow:

Методы упрощения некрасивых вложенных деревьев if-else в C #

Я просто подумал, что это может быть актуально.

...