Russian Qt Forum

Qt => Model-View (MV) => Тема начата: zzzseregazzz от Сентябрь 25, 2013, 09:05



Название: Каким паттерном является Qt Model-View?
Отправлено: zzzseregazzz от Сентябрь 25, 2013, 09:05
Есть паттерн Model-View-Controller. Но в документации по Qt про Controller ничего не сказано.
Где потерялся Controller?


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 09:20
Контроллером тут является делегат, насколько я понял, почитав статью на вики про M-V-C.

Model хранит данные.
View отображает.
Делегат позволяет изменять и манипулировать данными.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: mutineer от Сентябрь 25, 2013, 10:09
Контроллер тут размазан между view и model


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 10:10
View же ничего не изменяет. Это делает делегат как бы. Разве нет?


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Old от Сентябрь 25, 2013, 10:17
Контроллер полностью пишется пользователем, таких заготовок как Q...View и Q...Model просто не предусмотрено.



Название: Re: Каким паттерном является Qt Model-View?
Отправлено: mutineer от Сентябрь 25, 2013, 10:45
View же ничего не изменяет. Это делает делегат как бы. Разве нет?

Дефолтный делегат создается вьюшкой и спрятан от пользователя именно во вью. Я исходя из этого говорил


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 10:48
Ну тогда вердикт, что во View спрятан контроллер.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Old от Сентябрь 25, 2013, 11:28
Ну тогда вердикт, что во View спрятан контроллер.

Делегат не является контроллером, в терминах данного паттерна.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 12:22
Old поясните пожалуйста, почему нет?

Модель (англ. Model). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать. - Q*Model

Представление, вид (англ. View). Отвечает за отображение информации (визуализацию). Часто в качестве представления выступает форма (окно) с графическими элементами. - Q*View

Контроллер (англ. Controller). Обеспечивает связь между пользователем и системой: контролирует ввод данных пользователем и использует модель и представление для реализации необходимой реакции. - При редактировании ячейки создаётся делегат, предоставляет ввод данных пользователю  и -//-.  

Пока не могу принять вашу точку мнения без аргументов.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Igors от Сентябрь 25, 2013, 12:38
Простой пример - юзер хочет удалить строку (ф-ционал контроллера). Отсюда видно что никаким контроллером делегат не является


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 12:47
Невнятный пример, но смысл понял.

Часть функций контроллера имеются у делегата, но полностью он им не является.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Igors от Сентябрь 25, 2013, 13:41
Невнятный пример, но смысл понял.
Если Вы поняли - то очень внятный  :)


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 13:49
Не будем оценивать внятность примера по моей понятливости :)


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Old от Сентябрь 25, 2013, 14:47
Old поясните пожалуйста, почему нет?
Роль контроллера управлять моделью и видом: настроить отображение, сортировки/фильтры, добавление/удаление записей и т.д.
А делегат это по сути возможность более удобно настроить вид для конкретной задачи. Например, пользователю нужно иметь возможность редактировать данные прямо в таблице, но мы можем запретить такое редактирование в виде и открывать для этого диалог.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Bepec от Сентябрь 25, 2013, 14:49
Благодарю за объяснение. Осознал.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Igors от Сентябрь 25, 2013, 16:58
Роль контроллера управлять моделью и видом: настроить отображение, сортировки/фильтры, добавление/удаление записей и т.д.
Агв, это один из тех мерзких классов который должен знать всех  :)


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Old от Сентябрь 25, 2013, 17:16
Агв, это один из тех мерзких классов который должен знать всех  :)
Ну всех это громко сказано. Он должен знать двух остальных участников. :)
А просмотр должен знать модель. Только модель не обязана никого знать, хотя иногда полезно, что бы она знала контроллера. :)


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: lit-uriy от Сентябрь 29, 2013, 18:41
Но в документации по Qt про Controller ничего не сказано.
Где потерялся Controller?
В документации сказано:
Цитировать
Архитектура модель-представление-контроллер (Model-View-Controller, MVC) является шаблоном проектирования, берущим начало от Smalltalk, который часто используется для создания пользовательских интерфейсов. В книге Design Patterns Гаммы (Gamma) и других написано:
Цитировать
MVC состоит из трех типов объектов. Модель - объект приложения, представление - его экранное представление и контроллер - определяет реакцию пользовательского интерфейса на пользовательский ввод. До MVC при разработке пользовательского интерфейса эти объекты смешивались вместе. MVC разделяет их, для увеличения гибкости и возможности повторного использования.

Если объединить объекты представления и контроллера, то в результате получится архитектура модель/представление. Это все еще отделяет способ хранения данных от способа их представления пользователю, но обеспечивает простую структуру, основанную на тех же принципах. Данное разделение дает возможность показать пользователю одни и те же данных в различных представлениях и реализовать новые типы представлений без изменения базовой структуры данных. Чтобы обеспечить гибкость управления пользовательским вводом, мы представляем концепцию делегата (delegate). Преимущество наличия делегата в этой структуре состоит в том, что это дает возможность для настройки представления и редактирования элементов данных.


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: zzzseregazzz от Сентябрь 30, 2013, 10:32
Как вы считаете, объединение View и Controller - это преимущество или недостаток Qt?

Есть ли opensource реализации настоящего MVC?


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: Igors от Сентябрь 30, 2013, 12:19
Как вы считаете, объединение View и Controller - это преимущество или недостаток Qt?

Есть ли opensource реализации настоящего MVC?
Один-два таких общих вопроса - нормально. Но если Вы задаете пачками только общие вопросы - превращается во флуд. Знайте меру


Название: Re: Каким паттерном является Qt Model-View?
Отправлено: unkeep от Октябрь 22, 2013, 17:02
кэп, но паттерн "наблюдатель" тоже имеет место? хотя походу везде где есть сигнал-слот, отчасти реализуется "наблюдатель"...