Я разрабатываю приложение WinForms на С#. У меня ограниченный опыт программирования GUI, и мне приходится многому научиться на лету. Это, как говорится, здесь, что я строю.
Посмотрите общий GUI на следующую ссылку:
GUI http://img227.imageshack.us/img227/1084/program0.jpg
Теперь я уже много сделал, но в очень плохом шаблоне автономного дизайна. Я не знал, что проект когда-либо достигнет определенного размера, и, как таковой, пришло время сделать большой рефакторинг.
Я много изучал шаблоны проектирования GUI, и модель, которую я желаю реализовать, - это пассивный вид (см. http://martinfowler. ком /eaaDev/PassiveScreen.html). Я ищу некоторую помощь о том, как собрать все это.
Фон:
1) В зависимости от того, что пользователь нажимает на "TreeView", "Список" в нижнем левом углу отобразит список объектов, которые могут заполнять область "Редактор". Эти объекты могут быть TextBox или DataGridView. Пользователь переключает список, чтобы выбрать то, что он хочет видеть в "Редакторе"
2) Модель представляет собой папку с данными и конфигурационными файлами. Существует внешняя программа, которая работает в заданном каталоге, создает выходные файлы/папки и т.д. Эта программа, которую я разрабатываю, предназначена для эффективного управления/настройки этих объектов в удобном для пользователя способом.
3) Проблема с тем, как я делаю то, что это почти невозможно проверить, и, следовательно, переход к шаблону пассивного представления MVP-esque
Я пытаюсь сделать так, чтобы программа работала независимо от представления. Я не смог найти примеров, когда более сложное интерактивное представление используется с пассивным представлением.
Вопросы:
1) Нужно ли мне реализовать один большой интерфейс/представление для всего "взгляда" программы, а затем реализовать суб-интерфейсы/под-представления для каждого из TreeView, Editor, Logger и т.д.? Или есть лучшая "структура" для этого?
2) Когда дело доходит до "раздачи" событий из представления на презентатор/контроллер (какая бы терминология вы не хотели использовать W.R.T), каким образом я должен это делать? Иногда у меня есть простые свойства, которые необходимо обновить, а иногда мне нужен целый ряд шагов, чтобы развернуть.
Мне бы очень понравились советы и советы по этой теме. Я просмотрел Интернет, и я не нашел адекватных примеров, чтобы помочь мне продолжить этот проект.
Спасибо заранее!
Daniel