|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 70115. Ответов 99
Пример разработки приложения с нуля под WinForms
Рассматриваются такие аспекты разработки как:
В этом примере НЕ рассматриваются шаблоны типа фабрик, не рассматривается внедрение зависимостей (DI). Используется простой вариант шаблона Model-View-Presenter, адаптированный под специфику WinForms. Этот топик перекликается с этим FAQ, и является практическим примером к нему. Комментарии и вопросы - приветствуются. Постановка задачи Требуется создать приложение - опросник. Опросник будет состоять из нескольких вопросов с различными вариантами ответов. Вопросы могут быть двух видов - с выбором одного ответа из набора возможных, и открытые вопросы, в которых респондент может указать произвольный ответ в виде текста. В опроснике нужно предусмотреть возможность задавать некоторые вопросы и альтернативы только при выполнении некоторых условий, например если в предыдущем вопросе респондент выбрал определенный ответ. Приложение должно состоять из двух частей - конструктора опросника и приложения в котором респондент может ответить на вопросы готового опросника. Результаты опроса должны выгружаться в виде, пригодном для дальнейшей обработки.
18
|
|
| 30.10.2018, 11:10 | |
|
Ответы с готовыми решениями:
99
Встраивание Google RESTful pattern A в модель MVP Создание дочернего окна в MVP
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||||||||||||
| 02.01.2019, 18:30 | |||||||||||||||||
|
В том же методе, в том же классе interview.anketa.Remove(prevAnswer); заменил на interview.anketa.Remove(interview.Curren tAnswer); Экспорт теперь вроде работает корректно. Еще подкорректировал механизм возврата. У кнопки btBack остались теже методы : Кликните здесь для просмотра всего текста
А в конце метода Build формы прохождения опросника добавил : Кликните здесь для просмотра всего текста
Добавлено через 8 минут if-else заменил на
0
|
|||||||||||||||||
|
|
|||||||||||
| 02.01.2019, 18:49 [ТС] | |||||||||||
|
MIRAMIX,
Все правильно вы сделали (в последнем варианте) НО, вот это выражение interview.PassedAnswers.Count != 0 - это логика. А логики не должно быть в интерфейсе. Логика должна быть в модели.Поэтому в InterviewManipulator нужно сделать метод CanGoToPrevQuestion:
1
|
|||||||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 02.01.2019, 21:08 | |||||||
|
Код огонь, никаких if else, а получаем правду/ложь. Несколько раз пересмотрел, чтоб понять)) Где всему этому научиться? Явно не по книжкам Добавлено через 2 часа 0 минут Storm23, ну никак не могу понять - как запретить проге принимать пустой ответ в строке ввода. Если пользователь ничего не ввел - вставлять в эксель дефолтную фразу null. Все файлы перелопатил. Логически, подходит вот это из InterviewManipulator : Кликните здесь для просмотра всего текста
Вроде есть условие - принимаем не пустые ответы, но на деле прохождение опросника идет как по маслу( Беда в том, что если пользователь ничего не введет - выходит ошибка при экспорте, типа ячейка в экселе пустая. Эта же ошибка выходит, если показ вопроса зависит от ответа в другом вопросе - то есть, если вопросов 5 и 5й вопрос зависим (может показаться, а может нет) - вылетает ошибка с отсутствием ответа. Последняя часть мелочи, переварю весь код, исправлю сам, но вот с пустым полем беда, ответ не обязателен от пользователя.
0
|
|||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 08.01.2019, 22:21 | ||||||
|
Storm23, прошу помощи с проверкой на пустой ответ с ручным вводом.
Сделал вот так у кнопки перехода к следующему вопросу : Кликните здесь для просмотра всего текста
Так месседжбокс выходит и при выборе ответа из списка. В идеале - при пустом ответе отправлять ответ типа прочерка, но пытался хотя бы информировать, чтоб был дан ответ, но не работает(
0
|
||||||
|
|
|||||||||
| 09.01.2019, 10:00 [ТС] | |||||||||
|
Для проверки того, что ответ пустой сделайте в классе Answer свойство IsEmpty:
1
|
|||||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 09.01.2019, 22:31 | |||||||
|
Storm23, огромное спасибо)
2я половина метода GoToNextQuestion : Кликните здесь для просмотра всего текста
На локальном тесте вроде все ок. Если эту проверку вставлять в обработчик кнопки перехода к следующему вопросу при прохождении опроса - нужно нажать 2 раза, чтоб ответ ("-") вставился и закрепился.
0
|
|||||||
| 09.01.2019, 22:50 | |
|
Не по теме: Storm23, в силу своей наивности, не всегда правильно понимаю речевые обороты. Надеюсь вы не о том, откуда руки у некоторых растут :)
0
|
|
|
5 / 5 / 3
Регистрация: 15.01.2017
Сообщений: 690
|
|
| 11.08.2020, 15:25 | |
|
Storm23,
1. Можно ли рассматривать сообщения 1-13, 38 (Шаг 11: Добавление экспорта в БД) как пример ООП MVP ? 2. В данных сообщениях актуальные решения или нужно собирать по всей теме изменения к 1-13, 38 (Шаг 11: Добавление экспорта в БД) как пример ООП MVP? 3. Или есть обновлённое решение в одном месте? Задаю вопрос, потому, что бегло прочитал сообщения других пользователей.... многие критикуют данное решение.
0
|
|
|
|
||||
| 12.08.2020, 10:40 [ТС] | ||||
|
Soft17,
0
|
||||
|
0 / 0 / 0
Регистрация: 25.02.2021
Сообщений: 2
|
|
| 07.07.2021, 13:10 | |
|
Storm23, добрый день. Подскажите, пожалуйста, правильное с Вашей точки зрения решение проблемы замены юзерконтрола в зависимости от выбранного значения комбобокса в создающемся по умолчанию юзерконтролу с возможностью возврата к изначальному. Если не сложно, то пример кода был бы полезным. Заранее благодарю.
0
|
|
|
|
||
| 07.07.2021, 15:06 [ТС] | ||
|
Редактируется объект одного и того же класса? Или в зависимости от комбобокса нужно создавать/редактировать объекты разных классов? Если второе - то нужно просто создать юзерконтрол для нужного класса и передвать в его Build(...) нужный объект. Если первое - то не очень понятно, почему у объекта разные редакторы. Ну в принципе решается также - создаются разные юзерконтролы, в их Build передается один и тот же объект. В чем проблема то?
0
|
||
|
0 / 0 / 0
Регистрация: 25.02.2021
Сообщений: 2
|
||
| 07.07.2021, 15:15 | ||
|
Пошел по второму пути, создал разные юзерконтролы и передаю в них объект, но где-то в логике реализации ошибся, потому и просил пример кода.
0
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 394
|
||||||
| 15.12.2021, 16:21 | ||||||
|
Может вопрос уже где-то задавался, но внятного ответа я не нашел.
Как быть, если построение модели занимает время? (например, загружаются данные из Интернета)
в моем случае, пока BuildDataSource() не отработает, форма будет мертва.
0
|
||||||
|
Она кричала хватит
41 / 42 / 7
Регистрация: 21.05.2019
Сообщений: 112
|
|||||||
| 16.12.2021, 17:07 | |||||||
1
|
|||||||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 394
|
|
| 18.12.2021, 20:03 | |
|
И ещё. Подскажите пожалуйста, почему тут - https://www.cyberforum.ru/atta... 1445438693 предпочитаются не конструкторы а статические классы для создания объектов модели?
0
|
|
|
|
||
| 19.12.2021, 10:19 [ТС] | ||
|
Например, для gif картинок вы захотите добавить свойство "продолжительность анимации". Для этого вы сделаете наследник class AnimatedFileItem : FileItem. И в этом классе пропишите свойство duration.Но как теперь создавать AnimatedFileItem вместо FileItem? Если использовать просто конструкторы, то получается, что решение о том какой класс создавать будет принимать внешний (по отношению к FileItem) код. Это нехорошо, потому что логика создания отдается на откуп внешнего кода, нарушается инкапсуляция. А вот если использовать статический метод Create внутри FileItem, то класс FileItem сам решает какой конкретно тип объекта создать, создает и возвращает его. При этом принятие решение об использовании конкретного наследника FileItem принимает сам FileItem. Сохраняется инкапсуляция; внешний код менять не потребуется.
1
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 394
|
|
| 19.12.2021, 11:09 | |
|
Storm23, но в этом примере все заранее известно. Поэтому все еще не понимаю. Или я просто взял пример, когда разработка еще кончилась?
0
|
|
|
|
||
| 19.12.2021, 12:36 [ТС] | ||
|
Это просто задел на будущее.
3
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 394
|
|
| 19.12.2021, 12:56 | |
|
Понял, благодарю.
0
|
|
| 19.12.2021, 12:56 | |
|
Помогаю со студенческими работами здесь
100
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
| Опции темы | |
|
|
Новые блоги и статьи
|
||||
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|