|
|
|
Создание программы - ООП модель, MVP30.10.2018, 11:10. Показов 73016. Ответов 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
|
|
| 20.11.2018, 01:50 | |
|
Storm23,
Позвольте задать последние 2 вопроса по ядру : 1. Можно на этапе прохождения опросника вернуться на шаг назад? То есть выбрал/ввел ответ на вопрос 2 - вышел вопрос 3 - нажал Назад - вопрос 3 пропадает и опять задается 2й вопрос. 2. Как можно реализовать возможность установки зависимости для AlternativePanel/QuestPanel от значения текста в textBox на форме конструктора? В чем суть дополнения к ТЗ - в оригинальном экселе (откуда черпается вся инфа о пользователях) есть столбец с датой трудоустройства в формате дд.мм.гггг. Так вот, для сотрудников опросник будет считываться из одного файла. Тот же вопрос про режим (5/2, 2/2..) зависит от стажа и вариант с 2/2 не должен показываться новичкам. textBox нужен на каждом QuestPanel/AlternativePanel. В него админ вписывает число (кол-во месяцев). Если после установки кол-ва полных месяцев работы сотрдудника < чем в textBox - вопрос не задается. Если ничего не указать в textBox-е - ничего не прятать от новичков. Давно выяснил, что если три вопроса A1, A2, A3 и два последних из них зависят от выбора в A1 - при записи в эксель, даже при наличии столбцов A1...A3 - выдаст ошибку. Не критично, поэтому, хотя бы textBox на каждой AlternativePanel. Только в таком случае придется и числа сохранять в .q. При считывании опросника уже сравнивать с реальным стажем. Впринципе это можно конструктору Интервью передать. Много вопросов уже задал, понимаю, но еще до углубленного изучения ядра не дошел. Спасибо заранее.
0
|
|
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|||
| 20.11.2018, 06:19 | |||
|
Например, начинается опрос и сразу же форма выбора респондента, например. Добавлено через 2 минуты
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 20.11.2018, 06:22 | ||
|
0
|
||
|
|
||||
| 20.11.2018, 10:47 [ТС] | ||||
|
Для этого в классе InterviewManipulator создаете метод GoToPrevQuestion, по аналогии с GoToNextQuestion. В этом методе нужно: 1) удалить последний Answer из Anketa 2) удалить тот же Answer из Interview.PassedAnswers 3) последний установить Answer как currentAnswer в Interview Если у вас есть некая информация, которую вы берете из внешнего источника, и от этой информации зависит прохождение интервью, то нужно: 1) Создать в анкете фейковый вопрос. Например с именем F1. 2) В вопросе F1 установить условие, которое никогда не будет выполняться. Например 1=2. Тогда вопрос F1 никогда не будет показываться респонденту. 3) Перед началом интервью, занести в Anketa данные для вопроса F1 (создав Answer для F1) из вашего внешнего источника. 4) Далее, в остальных вопросах опросника, вы сможете ссылаться на F1 в ваших условиях, и таким образом показывать/скрывать вопросы и альтернативы, в зависимости от F1.
0
|
||||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 20.11.2018, 12:27 | |
|
Fulcrum_013, прошу прощения, что намерен оспорить Ваше мнение - это наоборот вообще-то. ТЗ - ниболее полное описание спецификации практически со всеми деталями. Постановка же задачи - это более общая и глобальная цель, которую можно разбить на подзадачи и, в итоге, составить ТЗ.
В самом талмудном ТЗ есть такая глава даже - постановка задачи - более общее представление.
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 20.11.2018, 16:59 | |
|
0
|
|
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
|
| 21.11.2018, 01:15 | |
|
Fulcrum_013, там непроверенная и не достоверная информация.
Добавлено через 7 минут здесь читайте, что откуда выходит - https://studfiles.net/preview/2038443/, вообще ТЗ может содержать более точную спецификацию по входным и выходным параметрам системы и её компонентов, чего нет в постановке - возможно, в постановке идёт более полное описание архитектуры и бизнес процессов, но не наоборот. С одним ТЗ я могу полностью описать всю структуру данных - а постановка - это вообще обычно всегда было введением перед определением бизнес процессов и проработки архитектуры с моделями https://lektsii.org/7-60695.html. Постановка как бы определяет что мы хотим получить. В википедию кто-то откуда-то скопипастил бездумно, тот кто не делал ничего подобного. Добавлено через 5 минут Более близкий к теме дам пример - постановкой задачи мы могли бы назвать описание "хотелки" заказчика. Он говорит - я хочу опросник, чтобы он мог создавать опросы и проводить анкетирование. Каждый вопрос может быть зависим от ответа предыдущего вопроса. Анкеты должны сохраняться в БД, ФАЙЛЫ, читаться также. И ещё некоторые детали глазами заказчика, но уже более продуманные. А ТЗ бы описывало нам, какие формы что содержат, какие поля, какие форматы в файлах и БД, колонки и типы данных. Потом прорабатывается архитектура и бизнес процессы. Примерно так. Добавлено через 1 минуту ТЗ может идти и после проработки архитектуры - это уже по ситуации смотришь. Программист берёт ТЗ и клепает тупо код не думая. По постановке идёт работа как по основному заданию. Добавлено через 1 минуту Вообще, я работал в отделе постановке программного обеспечения - мы там вообще всё делали, но в основном клепали ТЗшки. После института пришёл и несколько удивился, что они весь этот процесс называют постановкой а не разработкой. В итоге мы занимались переводом хотелок специалистов в более полную документацию в виде ТЗ. Бизнес модели уже дорабатывали программисты. Добавлено через 56 секунд Но это не совсем корректное было определение, всё-таки мы там больше пили чай и ели торты. Добавлено через 4 минуты Возможно, я подзабыл, да, постановка может иметь более насыщенную работу, но обычно это дело или обозначается как видение или уже является всем процессом разработки. Короче, постановки тоже бывают разные - всё зависит от смысла, который в него, в этот термин вкладывают. Добавлено через 1 минуту Я скинул два источника, чтобы можно было увидеть, что в одном месте это этап разработки, а в другом - это весь процесс.
0
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||||||
| 21.11.2018, 01:38 | |||||||
|
Кликните здесь для просмотра всего текста
Под 1м пунктом подразумевалось currentQuestIndex - 1;? В результате лишь на месте активного вопроса появляется предыдущий (при нажатии на кнопку Назад разумеется). Удалить (визуально ответ) невозможно, да?
0
|
|||||||
|
187 / 100 / 19
Регистрация: 15.09.2011
Сообщений: 801
|
||
| 21.11.2018, 01:47 | ||
|
Добавлено через 5 минут вчера весь вечер потратил на то, что у меня форма вопроса в дизайнере схлопывается в узкую полоску - а понять почему- не могу. Или студия глючит или я в лыжах на асфальте. Устанавливаю окно - запускаю, а там полоски вместо вопросов. Устанавливаю обратно размер, закрываю студию - открываю - снова полоски. капец. так из-за дизайна, бывает время теряешь впустую.
0
|
||
|
|
|||||||
| 21.11.2018, 02:34 [ТС] | |||||||
|
Вот как должен выглядеть этот метод:
1
|
|||||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 21.11.2018, 04:02 | ||
|
1
|
||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|||
| 21.11.2018, 21:04 | |||
|
Ну я как обычный человек подумал, что если одно увеличивает -надо подправить немного и будет в обратную сторону. К тому же : Ядрышко-то огонь, позже разобрать и open-source dll-ку запилить можно. Спасибо) Интересный момент - когда удаляешь альтернативу, она остается визуально неактивной, словно картинка, когда новую добавляешь - пропадает и появляется активная новая. От чего так?
0
|
|||
|
|
|||||||
| 21.11.2018, 22:09 [ТС] | |||||||
|
В метод UpdateInterface добавьте pnMain.Invalidate():
0
|
|||||||
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
|
| 29.12.2018, 14:33 | |
|
Storm23, давно не отвечал, ждал испытаний своего проекта.
Всего 3 выявились ошибки в проекте : -как сделать неактивной/спрятать кнопку Назад при прохождение 1го вопроса в опроснике? Если нажать назад - на 1м вопросе - выходит ошибка -если вернуться назад и выбрать другой ответ из выпадающего списка - не подгружаются варианты в следующем вопросе, даже если опять вернуться и выбрать ранее выбранный ответ - все, следующие вопросы не подгружаются -если ответ с ручным вводом и пользователь при прохождении опросника не ввел туда текст - тоже ошибка. Можно как-нибудь хотя ввести проверку на пустое поле? Добавлено через 14 секунд С наступающим всех, форумчане)
0
|
|
|
|
||
| 29.12.2018, 20:15 [ТС] | ||
|
MIRAMIX,
у вас есть полный исходный код, у вас есть полное объяснение каждого метода, у вас проект хорошо структурирован. Что мешает вам самому исправить ошибки? Возникают проблемы - пробуйте их решить самостоятельно. interview.PassedAnswers. Если он пуст - то понятное дело, что вернуться нельзя. И в таком случае кнопку Назад нужно заблокировать.Остальные проблемы - я не вникал. Я думаю это чисто технические вопросы и вы можете сами с ними справиться.
0
|
||
| 30.12.2018, 17:07 | |
|
Не по теме: Storm23, А почему на хабре не хотите подобное публиковать?
0
|
|
| 30.12.2018, 22:32 [ТС] | |
|
0
|
|
| 30.12.2018, 23:05 | |
|
Не по теме: Storm23, Речь то про подобные шла.
0
|
|
|
#MRoose
8 / 9 / 3
Регистрация: 22.02.2013
Сообщений: 416
|
||||||
| 02.01.2019, 00:36 | ||||||
|
Storm23, с новым годом.
Вы правы, обленился что-то я. Еще несколько раз перечитал ваши шаги. Структуру все же полноценно не переварил, но уже легче ориентироваться в ядре) Так, что в итоге : 1. блокировка кнопки Назад для 1го вопроса : Кликните здесь для просмотра всего текста
2. Если в следующих вопросах список ответов зависел от ответа в предыдущих вопросах - варианты ответов у следующих вопросов вообще не появлялись - выходил пустой comboBox : В методе GoToPrevQuestion из класса InterviewManipulator убрал строчку interview.anketa.Remove(prevAnswer); Не понимаю почему, но все работает теперь вроде корректно)) 3. Как запретить проходить опрос без ввода чего-нибудь в поле ручного ввода пока не разобрался(
0
|
||||||
| 02.01.2019, 00:36 | |
|
Помогаю со студенческими работами здесь
80
Модель ООП Закрепить модель ООП Модель работы светодиода ооп ООП модель системы спама Ооп модель телефонного справочника Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|
Модель здравосохранения 17. Планы на выгорание
anaschu 23.05.2026
Вот конкретная схема реализации:
В классе Работник добавить:
накопленнаяУсталость — растёт каждый час работы, снижается в перерывы и болезни
коэффициентПрезентеизма — снижает продуктивность. . .
|
Изменение цветов в палитре gif файла aka фавикона
russiannick 23.05.2026
Изменение цветов в палитре gif файла, юзаемого как фавиконка в составе html-файла, помещенная в base64, средствами нативного Java Script, навеянное сном в майский день.
Для работы необходим браузер,. . .
|