Russian Qt Forum

Qt => Model-View (MV) => Тема начата: Igors от Октябрь 26, 2018, 12:23



Название: Старое дерево
Отправлено: Igors от Октябрь 26, 2018, 12:23
Добрый день

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

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

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

Спасибо


Название: Re: Старое дерево
Отправлено: RedDog от Октябрь 26, 2018, 13:34
Модель о вьюхе по хорошему знать ничего не должна, потому как сегодня это кутишный виджет (к примеру), а завтра это веб-морда.
Модель должна предоставлять апи, которое будет дергать абстрактная вьюха с одной стороны, а с другой модель "наполняет" данными бизнес логика.


Название: Re: Старое дерево
Отправлено: qate от Октябрь 26, 2018, 14:00
мы когданибуть увидим это великое дерево ?
приличные люди примеры (мини проект) на гитхаб выкладывают )



Название: Re: Старое дерево
Отправлено: sergek от Октябрь 26, 2018, 17:25
А рассказали бы, как это делается))


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

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


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

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

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

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

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


Название: Re: Старое дерево
Отправлено: Авварон от Октябрь 28, 2018, 14:44
Что Вы об этом думаете?

Что вы не правы=)


Название: Re: Старое дерево
Отправлено: qate от Октябрь 29, 2018, 08:24
Да, и я понимаю что дальше (нездорового) любопытства дело не уйдет  :)

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


Название: Re: Старое дерево
Отправлено: Igors от Октябрь 29, 2018, 09:06
так ведь это основное )
приведенный пример дерева ужасен по юзабилити
Adobe так не считает :)  И, видимо, многие юзеры тоже, иначе это приложение не было бы одним из лидеров видеомонтажа. Вообще я давно понял - мнить себя великим дизайнером и/или постановщиком не стоит. Человек много работающий с приложением чувствует многие вещи лучше, хотя он и не программист. Вот например что упорно спрашивают уже давно (из-за чего переделки и начались).

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