Russian Qt Forum
Ноябрь 22, 2024, 09:53 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Старое дерево  (Прочитано 8226 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« : Октябрь 26, 2018, 12:23 »

Добрый день

Продолжаю переделывать то самое обширное старое дерево (что в прошлый раз обозвал "таблицей"). Решил классы Qt не привлекать, слишком много всякого кастомного которого в Qt не видел.

Ну ладно, решил по крайней мере выделить "модель" как отдельный класс/сущность, которая к UI не имеет отношения. Раньше был один класс Layout (синглтон) с более чем 300 методами. Разбил его на два: LayoutData (модель) и LayoutView (вьюха). Результат - по меньшей мере 3/4 ф-ционала перекочевало во вьюху, она тоже стала синглтоном и др части приложения (активно) общаются с ней. А собсно "модель" выходит как бы никому и не нужна, получается только вью ее и знает.

Хорошо ли это или наоборот, типа "тревожный симптом"?

Спасибо
Записан
RedDog
Частый гость
***
Offline Offline

Сообщений: 221


Просмотр профиля
« Ответ #1 : Октябрь 26, 2018, 13:34 »

Модель о вьюхе по хорошему знать ничего не должна, потому как сегодня это кутишный виджет (к примеру), а завтра это веб-морда.
Модель должна предоставлять апи, которое будет дергать абстрактная вьюха с одной стороны, а с другой модель "наполняет" данными бизнес логика.
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #2 : Октябрь 26, 2018, 14:00 »

мы когданибуть увидим это великое дерево ?
приличные люди примеры (мини проект) на гитхаб выкладывают )

Записан
sergek
Гипер активный житель
*****
Offline Offline

Сообщений: 872


Мы должны приносить пользу людям.


Просмотр профиля
« Ответ #3 : Октябрь 26, 2018, 17:25 »

А рассказали бы, как это делается))
Записан

Qt 5.13.0 Qt Creator 5.0.1
Win10, Ubuntu 20.04
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #4 : Октябрь 28, 2018, 05:51 »

мы когданибуть увидим это великое дерево ?
приличные люди примеры (мини проект) на гитхаб выкладывают )
Не все проекты open-source, и не всякую вещь можно в карман засунуть, это нормально. Вот дерево (аттач) очень похожее на мое и откуда я заимствую идеи. В ячейку может быть напихано что угодно в зависимости от контекста текущей строки.

Да, и я понимаю что дальше (нездорового) любопытства дело не уйдет  Улыбающийся
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #5 : Октябрь 28, 2018, 06:29 »

Модель о вьюхе по хорошему знать ничего не должна, потому как сегодня это кутишный виджет (к примеру), а завтра это веб-морда.
Модель должна предоставлять апи, которое будет дергать абстрактная вьюха с одной стороны, а с другой модель "наполняет" данными бизнес логика.
Подобные общие соображения очень популярны и выглядят логично. Но так ли это на самом деле?

Модель всегда делается под вьюшку. Какая-то иллюзия общности сохраняется пока исходные данные - контейнер прямого доступа типа вектора. Иначе приходится или копировать данные или согласиться с утверждением что "модель" - вовсе не оригинал и не хранилище данных, это какой-то "навигатор" который позволит вьюхе доползти до первоисточника.

А раз так, то почему мы должны упорно сводить дело к data/setData ? Напр в случае дерева настоять на этом можно создав тучу кастомных "ролей", но единственный смысл в этом - все-таки использовать Qt классы, никакой общностью здесь и не пахнет. Ну а копирование по сути ничего не решает - ведь все равно надо как-то менять оригинал.

Вот такой сценарий: юзер тыкнул мышей, вьюшка разобралась где, с помощью модели нашла оригинал, и.. просто меняет его что часто выливается в солидную операцию (undo, обновление др окон и.т.п). Что здесь плохого? Есть опасность что какой-то ф-ционал (прочно) поселится во вьюшке? Да, за этим надо приглядывать и изменения выносить отдельно. Но переносить это в "модель" - оснований никаких.

Что Вы об этом думаете?
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #6 : Октябрь 28, 2018, 14:44 »

Что Вы об этом думаете?

Что вы не правы=)
Записан
qate
Супер
******
Offline Offline

Сообщений: 1177


Просмотр профиля
« Ответ #7 : Октябрь 29, 2018, 08:24 »

Да, и я понимаю что дальше (нездорового) любопытства дело не уйдет  Улыбающийся

так ведь это основное )
приведенный пример дерева ужасен по юзабилити
я сам не разберусь, а уж пользователи, которые начинают выть о "сложном" интерфейсе много проще этого дерева, и подавно
они привыкли к простым дизайнам UI смартафоном, которые у всех и несколько кнопок и простая табличка их вводят в уныние
"дай", говорят, "нам одну кнопку, чтобы все делала сразу"
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #8 : Октябрь 29, 2018, 09:06 »

так ведь это основное )
приведенный пример дерева ужасен по юзабилити
Adobe так не считает Улыбающийся  И, видимо, многие юзеры тоже, иначе это приложение не было бы одним из лидеров видеомонтажа. Вообще я давно понял - мнить себя великим дизайнером и/или постановщиком не стоит. Человек много работающий с приложением чувствует многие вещи лучше, хотя он и не программист. Вот например что упорно спрашивают уже давно (из-за чего переделки и начались).

- есть окно (наше дерево) в котором список всех 3D объектов сцены. Любой объект можно выключить (крайний левый чекбокс), при этом он не рисуется в др окнах. Все нормуль, во всяком случае корректно. А вот юзер недоволен - неудобно. Да, он может выкл все объекты (Select All + чекбокс) а потом вкл только нужные, но это возня. Ему нужна возможность ткнуть в объект - и только он становится видимым, остальные автоматом выкл и дизаблятся в дереве. На скриншоте выше такая возможность есть, поэтому отвертеться не удалось  Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.057 секунд. Запросов: 23.