|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 72943. Ответов 100
Пример разработки приложения с нуля под WinForms
Рассматриваются такие аспекты разработки как:
В этом примере НЕ рассматриваются шаблоны типа фабрик, не рассматривается внедрение зависимостей (DI). Используется простой вариант шаблона Model-View-Presenter, адаптированный под специфику WinForms. Этот топик перекликается с этим FAQ, и является практическим примером к нему. Комментарии и вопросы - приветствуются. Постановка задачи Требуется создать приложение - опросник. Опросник будет состоять из нескольких вопросов с различными вариантами ответов. Вопросы могут быть двух видов - с выбором одного ответа из набора возможных, и открытые вопросы, в которых респондент может указать произвольный ответ в виде текста. В опроснике нужно предусмотреть возможность задавать некоторые вопросы и альтернативы только при выполнении некоторых условий, например если в предыдущем вопросе респондент выбрал определенный ответ. Приложение должно состоять из двух частей - конструктора опросника и приложения в котором респондент может ответить на вопросы готового опросника. Результаты опроса должны выгружаться в виде, пригодном для дальнейшей обработки.
19
|
|
| 30.10.2018, 11:10 | |
|
Ответы с готовыми решениями:
100
Встраивание 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
Сообщений: 395
|
||||||
| 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
Сообщений: 395
|
|
| 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
Сообщений: 395
|
|
| 19.12.2021, 11:09 | |
|
Storm23, но в этом примере все заранее известно. Поэтому все еще не понимаю. Или я просто взял пример, когда разработка еще кончилась?
0
|
|
|
|
||
| 19.12.2021, 12:36 [ТС] | ||
|
Это просто задел на будущее.
3
|
||
|
67 / 65 / 61
Регистрация: 11.11.2015
Сообщений: 395
|
|
| 19.12.2021, 12:56 | |
|
Понял, благодарю.
0
|
|
| 19.12.2021, 12:56 | |
|
Помогаю со студенческими работами здесь
100
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Модель здравосохранения 14. Собираем всю модель вместе.
anaschu 22.05.2026
Модель собрана. В будущих постах на видео я покажу, как она работает.
В этом посте запускаем её, проверяем результаты и разбираем что можно с ней делать дальше.
Перед запуском проверяем. . .
|
Модель здравоохранения 13. Добавление самой системы здравоохранения.
anaschu 22.05.2026
В предыдущем посте мы настроили болезни. Теперь добавим события, которые управляют здоровьем всего коллектива, а также настроим рабочий график и расчёт финансов.
В Main создаём четыре события. . . .
|
Модель здравоохранения 12. добавление болезней через ресурпул, как аварии
anaschu 22.05.2026
Болезни — это ключевая часть нашей модели. Нам нужно, чтобы работник периодически уходил на больничный, его задание при этом зависало, а после выздоровления работа возобновлялась. Реализуем это двумя. . .
|
Модель здравоохранения 11. Создаём классы Задание и Работник
anaschu 22.05.2026
В AnyLogic каждая заявка и каждый ресурс — это объект определённого класса. Нам нужно создать два класса: Задание (заявка) и Работник (ресурс).
Класс Задание
В дереве проекта нажимаем правой. . .
|
|
Модель здравоохранения 10. Новая модель, смотрим, как добавлять логические блоки, и что писать внутри
anaschu 22.05.2026
Открываем AnyLogic, создаём новый проект. В дереве проекта появляется класс Main — это главный агент, в котором будет жить вся наша логика.
Палитра блоков
Слева находится палитра. Нас интересует. . .
|
модель ЗдравоСохранения 9. Новая модель, разбираемся, как ее создавать
anaschu 22.05.2026
В этой серии постов мы построим модель небольшого рабочего коллектива. Сотрудники получают задания, выполняют их, иногда болеют — и мы хотим посчитать, сколько это стоит компании.
Метод. . .
|
[golang] Linked list
alhaos 22.05.2026
Связный список / Linked list
Связный список структура данных позволяющая хранить список значений, в отличии от массива в памяти хранится не сплошным куском, а отдельными частями которые ссылаются. . .
|
[golang] Двоичная куча, min-heap
alhaos 20.05.2026
Двоичная куча
Двоичная куча — структура данных, которая всегда держит самый важный элемент наготове.
Представьте очередь к хилеру в игре, и очередь из игроков в приоритете те у кого меньше. . .
|