|
-7 / 2 / 1
Регистрация: 10.04.2016
Сообщений: 53
|
|
Тот самый MVC для desktop13.05.2016, 17:21. Показов 3196. Ответов 15
Метки нет (Все метки)
Доброго времени, форумчане. Последнее время пытаюсь постигнуть дзен пониманием паттернов программирования GUI-приложений, но в голове мозаика не складывается. Хорошей литературы достаточно для веб, но MVC для веб не увязывается с настольными приложениями. Да и стоит ли, может тут лучше использовать другой подход?
Сейчас я понимаю View как набор состояний отображения, Controller переключает эти состояния, и Model хранит логику программы и методы для её изменения. Закрадывается предположение,что модели для View и Controller - разные понятия. Эти все теории просты, когда эта троица представлена в одном экземпляре, но когда появляется дерево моделей, вложенные вьюшки, в том числе для повторного использования, контролер или раздувается до деградации ООП к простым функциям (методам внутри одного контролера), или теряет переносимость при изменении структуры моделей или представления, так вот тогда становится непонятно, кто кого имеет, что во что вложено, кто какие выполняет задачи. Пишу на Qt c++, там есть сигналы и подписка на них. Но мне бы хотелось обсудить сам принцип, можно на общих схемах.
0
|
|
| 13.05.2016, 17:21 | |
|
Ответы с готовыми решениями:
15
Тот же самый отбор r6010 - Abort() (тот самый Страуструпп) |
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 16.05.2016, 19:48 | ||
|
а модель должна быть одна. суть вьюшек: по разному показывать одну и туже модель. при изменении модели, вьюшки идут лесом, и приходится пилить новые.
0
|
||
|
44 / 44 / 19
Регистрация: 04.05.2014
Сообщений: 190
|
|
| 18.05.2016, 10:54 | |
|
O_Q, начинается всё всегда с модели. Модель состоит из данных, методов доступа к ним и методов изменения данных. Controller и View не содержат данных (кроме служебных).
View занимается только отображением интерфейса: он отображает данные, обращаясь к Model и показывает пользователю элементы управления (кнопочки, поля редактирования, меню и др.). Controller - необязательный компонент. Он управляет реакцией на события. События бывают двух типов - зависящие от действий пользователя (тогда View вызывает методы Controller-а) и независимые (например, таймеры могут быть встроены в Controller).
0
|
|
|
-7 / 2 / 1
Регистрация: 10.04.2016
Сообщений: 53
|
||
| 22.05.2016, 18:16 [ТС] | ||
|
0
|
||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 22.05.2016, 18:41 | |
|
O_Q
Одна модель -- один MVC. Если две модели, то два MVC. Книга и покупатель -- это какие-то бизнес-объекты, которые, скорее являются частью программной модели какого-то бизнес-процесса.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 22.05.2016, 21:11 | ||
|
модель определяется совокупностью классов, которые определяют её бизнес-логику.
0
|
||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
|
|
| 22.05.2016, 23:20 | |
|
"Модель" употребляется в разных значениях. Модель, которая "М" в MVC - это доменная модель, то есть, совокупность классов, которые определяют бизнес-логику.
0
|
|
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
|
||
| 23.05.2016, 08:51 | ||
|
0
|
||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 23.05.2016, 09:29 | ||
|
0
|
||
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
|
|
| 23.05.2016, 11:28 | |
|
mporro, к уровню представления я отношу всю триаду MVC (представление != уровень представления), точнее все такие наборы (окна/страницы). View (представление) - это уже часть этого уровня. Модель триады MVC (или MVP) так же является частью уровня представления, так как отражает фунцкиональность данного окошка/страницы. Если для этой цели можно использовать модель предметной области без переделок, то зашибись - не нужно будет делать 100500 моделей
. Но у окошка может быть функционал не являющий частью бизнес-процесса, но являющий исключительно частью UI (выбранный элемент списка, имя файла выбранного документа, логин/пароль на странице авторизации). Вот это и должно храниться в модели MVC. Вообще, как мне кажется, иметь на каждом уровне свой набор моделей - нормальное явление. Вот и получается, что у бизнес-процессов свой набор моделей, у уровня представления свой (причём модели MVC могут содержать модели бизнес-уровня). Очень хорошо, если можно переиспользовать модели между уровнями, но так далеко не всегда может быть. Добавлено через 6 минут mporro, тут ещё надо не забывать, что чёткого описания MVC нету, каждый автор трактует всё по своему. Я вот, придерживаюсь варианта предложенного Дино Эспозито, мне его видение архитектуры ПО кажется разумным. Так, что это вопрос дискуссионного характера .
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|||
| 23.05.2016, 13:01 | |||
|
Не по теме:
Добавлено через 23 минуты Не по теме:
0
|
|||
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
|
|
| 23.05.2016, 16:07 | |
|
mporro, значит я и правда мог что-то не так понять.
На данный момент я практикую такой подход: модель из MVC (MVP) - агрегат содержащий как модели предметной области так и примитивы необходимые представлению. Т.е. модель содержит только то, что нужно представлению и, возможно, в более удобном для него виде (а это уже может не быть доменная модель). Контроллер\презентер, реагируя на запрос от представления, обращается к моделям предметной области и, если нужно, к службам предметной области, а так же обновляет другие данные в модели MVC. После этого представление обновляется. Это не верная трактовка?
0
|
|
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
||
| 23.05.2016, 16:30 | ||
|
P.S. Ещё сегодня развелось очень много дочерних подходов, которые борются с проблемой "виджетов", так как оригинальная идея становится через-чур многословной. Так как книга, которую Вы привели, что-то там про MS и .NET, то, возможно, там вообще не про MVC, а какой-то специальный подход для работы с системой "виджетов", которые гораздо сложнее, чем оригинальный Tool.
0
|
||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
|
||
| 23.05.2016, 17:50 | ||
|
Я считаю:
MVC - это не набор троек M-V-C. У меня одна Модель и несколько Контроллеров. На каждый из Контроллеров может быть несколько Представлений. Для работы с одним Представлением Контроллер использует разные виды классов: 1. "формы" - классы для получения данных от Представления 2. "модель представления" - классы для передачи данных представлению 3. "службы" - классы для изменения Модели (Предметной Модели) и получения данных из Модели (бизнес-логика) Но я не считаю, что "формы" или "модели представления" играют роль модели в MVC.
0
|
||
|
14293 / 9378 / 1352
Регистрация: 21.01.2016
Сообщений: 35,357
|
|||
| 23.05.2016, 18:02 | |||
). Просто у меня возникли сомнения, что я не правильно роль модели себе представляю. Возможно, что это действительно так. Но разделение (и тестопригодность) кода это не влияет, а значит всё путём.Книжка действительно не про MVC, но про модели как таковые. Я оттуда много чего подчерпнул. Хотя специалисты там вряд ли что-то новое найдут. Добавлено через 5 минут
0
|
|||
|
Модератор
3136 / 2283 / 469
Регистрация: 26.03.2015
Сообщений: 8,886
|
||
| 23.05.2016, 22:11 | ||
|
Класс формы содержит поля, которые есть на форме (включая скрытые). И эти поля могут содержать служебную информацию или информацию, необходимую лишь для валидации. Класс модели представления содержит информацию, необходимую представлению. И эта информация может быть собрана из разных источников.
0
|
||
| 23.05.2016, 22:11 | |
|
Помогаю со студенческими работами здесь
16
Реализация MVC паттерна в несложном desktop приложение на Java Не срабатывают события, если использовать тот же самый элемент в шаблоне кто зделает тот самый крутой на етом сайте(на языке с++) Почему в функцию можно передавать аргументы с амперсандом или без него и результат тот же самый? Самый самый тихий кулер для процессора Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536
Одним из. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
|
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|