#c# #winforms #wizard
#c# #winforms #мастер
Вопрос:
Я пытаюсь разработать sceleton для своего программного обеспечения с несколькими мастерами и не могу найти для этого хорошего решения. Все мои попытки слишком сложны и уродливы. Я использую NET CF и WinForms.
У меня есть несколько представлений: ViewA, ViewB, ViewC, ViewD и т.д., В каждом представлении есть кнопки «назад», «далее» и «отмена»
Эти представления используются мастерами, как показано ниже, у каждого мастера есть точка входа и конечная точка, также ее можно отменить.
WzrdA: -> ViewA <-> ViewB <-> ViewC ->
WzrdB: -> ViewB <-> ViewD ->
WzrdC: -> ViewC <-> ViewD ->
И, наконец, мастера объединены в рабочие процессы:
WfA: ViewMain (start WfA) -> WzrdA -> WzrdB -> WzrdC -> back to ViewMain
WfB: ViewMain (start WfB) -> WzrdA -> WzrdC -> back to ViewMain
Итак, у меня есть единственное главное представление с двумя кнопками «Запустить WfA» и «Запустить WfB», в этом случае рабочий процесс «WfB», например, должен показывать последующие представления:
-> ViewA <-> ViewB <-> ViewC -> ViewC <-> ViewD ->
эта последовательность описывает кнопки «Назад» / «Далее», если была нажата кнопка «Отмена», ее необходимо немедленно переместить в основной вид.
Кто-нибудь знает четкое и приятное решение этой проблемы?
Комментарии:
1. Какую коллекцию вы используете для хранения «страниц» мастера?
2. Я запутался в связи между представлениями, мастерами и рабочими процессами. Означает ли это, что если я запускаю WfA, я вижу (разворачивая мастера -> представления): ViewA, ViewB, ViewC, VIEWBB, ViewD, ViewC, ViewD ? Это одна и та же форма / шаблон, просто используемые для отображения разных данных, или я действительно вижу одно и то же снова и снова?
Ответ №1:
Следующая концепция (из вашего поста) нарушает DRY, SRP и ООП в целом:
в каждом представлении есть кнопки «назад», «далее» и «отмена»
Для фреймворка wizard у вас обычно должно быть единственное родительское представление, в котором размещены эти кнопки. Должен быть контроллер, который управляет коллекцией страниц (LinkedList<> кажется естественным) и загружает страницы в родительский файл в соответствии с вашей логикой потока.
Общая архитектура, которую я здесь описываю, соответствует MVC. Проверьте это.
Подробнее: Ваш контейнер мастера может быть формой (с изменяемой панелью для размещения страниц), но ваши страницы должны быть пользовательскими элементами управления, чтобы вы могли размещать их в родительском.