LINUX.ORG.RU

Столкнулся с таким подходом к разработке GUI

 , , ,


1

3

В контексте Qt.

Имеем 3 класса:

  • Dialog
  • DialogUi
  • DialogCtl

Класс DialogUi собственно имеет дело с виджетами. Класс DialogCtl имеет дело с внутренними структурами, данными и т.п., т.е. там логика. Класс Dialog используется как связь GUI и контроллера, т.е. данные из ui класса посредством signal-slot передаются в ctl.

С одной стороны, разделение выглядит логично, типа логика отделена от GUI. С другой стороны, кмк, dialog представляет собой лишнюю сущность, ведь зачем использовать signal-slot, если можно вызвать функцию напрямую. В общем же это не получится чистое отделение логики, поскольку оно завязана на GUI, значит это GUI-логика. Есть ли вообще смысл в таком разделении?

Что думает all?

★★★★★

Последнее исправление: UVV (всего исправлений: 2)

Что думает all?

Согласен.

Я обычно разношу все сколько-нибудь сложные виджеты и их логику по разным формам, а потом подгружаю их в дизайнере — таким образом даже выделенный контроллер не особо нужен.

CrossFire ★★★★★
()

Возможно я устарел, но я думаю, что rtfm

pon4ik ★★★★★
()

велосипед на тему mvc?

/thread

anonymous
()
Ответ на: комментарий от CrossFire

Так вот я о чём и говорю. Как по мне одного класса вместо трёх вполне себе достаточно. Зачем усложнять и менять что-то в трёх местах (а менять всё равно придётся) при добавлении функционала, если можно это сделать в одном месте..

А да, здесь не упомянут ui файл, который как бы отдельно в private секции DialogUi

UVV ★★★★★
() автор топика
Ответ на: комментарий от peregrine

Интересно. Об этом не подумал, спасибо.

UVV ★★★★★
() автор топика
Ответ на: комментарий от peregrine

В этом случае два класса достаточно вроде бы, нет? ui и ctl, зачем связующий с сигнал-слотами?

UVV ★★★★★
() автор топика

Это очень хорошее разделение. Как только тебе понадобится сделать новый интерфейс над старой логикой или наоборот, ты поймешь. Плюс, это облегчает тестирование логики.

staseg ★★★★★
()

Может, я чего-то не понимаю в MV*, но

Класс DialogCtl имеет дело с внутренними структурами, данными и т.п., т.е. там логика.

разве это не view model, а

Класс Dialog используется как связь GUI и контроллера, т.е. данные из ui класса посредством signal-slot передаются в ctl.

разве не контроллер?

x3al ★★★★★
()
Ответ на: комментарий от staseg

Как только тебе понадобится сделать новый интерфейс над старой логикой или наоборот, ты поймешь.

Я понял твою мысль. Но почему-то мне кажется, что будь оно всё в одном классе, было бы не сложнее.

Плюс, это облегчает тестирование логики.

Тут ты прав. Но тестирование GUI от этого проще не становится правда.

UVV ★★★★★
() автор топика
Ответ на: комментарий от ichi404

А вот это интересно. Пойду почитаю.

UVV ★★★★★
() автор топика
Ответ на: комментарий от ichi404

A criticism of the pattern comes from MVVM creator John Gossman himself,[12] who points out that the overhead in implementing MVVM is «overkill» for simple UI operations. He also states that for larger applications, generalizing the ViewModel becomes more difficult. Moreover, he illustrates that data binding in very large applications can result in considerable memory consumption.

Собсно это то, из-за чего я и начал этот тред. Мне кажется, что приложение при использовании такого подхода становится жирнее, без видимой на то причины.

UVV ★★★★★
() автор топика
Ответ на: комментарий от ichi404

Ok, спасибо ещё раз.

UVV ★★★★★
() автор топика
Ответ на: комментарий от UVV

Затем, чтобы не писать 100500 обработчиков логики, дергающих методы из логики, да и логику можно переделывать, не боясь за то, что где-то что-то поломается и где-то за чем-то не досмотришь, т.к. тебе только Dialog в 90% случаев придётся поправлять.

peregrine ★★★★★
()

Если формочка совсем простая то не имеет смысла, средней сложности - опять нет смысла, а если главное окно сложной программы - 100% оправданное разделение.

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от UVV

Если предполагается дальнейшее развитие, то так и стоит в общем делать.

invy ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.