Есть ли будущее у DELPHI?
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [216.73.216.43] |
|
|
Правила раздела:
| Страницы: (245) « Первая ... 77 78 [79] 80 81 ... 244 245 ( Перейти к последнему сообщению ) |
Есть ли будущее у DELPHI?
|
Сообщ.
#1171
,
|
|
|
|
--Ins-- зачем вам вин формы? впф юзайте.
|
|
Сообщ.
#1172
,
|
|
|
|
Отлично, смешали View и Model, в духе Делфи, чо. |
|
Сообщ.
#1173
,
|
|
|
|
DesweR, MVC вообще нет ни в каком виде в Delphi?
|
|
Сообщ.
#1174
,
|
|
|
|
Цитата DesweR @ Кажется начинаю понимать (почитал ещё статью на хабре), в LiveBindings система связи с точностью до наоборот. Опиши поподробнее, как будет выглядеть процесс связывания двух Edit'ов и Label'а (из той задачки), а потом и свою задачку подгоню. Ну все просто, у контроллера будет Outlet типа TextField, а на интерфейсе например два UITextField, и они просто мышкой связываются с этим Outlet'ом. Всё. |
|
Сообщ.
#1175
,
|
|
|
|
Цитата D_KEY @ DesweR, MVC вообще нет ни в каком виде в Delphi? А ты последние страницы читал? |
|
Сообщ.
#1176
,
|
|
|
|
В каком смысле "реализацию Action'ов"? Если ты про класс Action, то нет, пишется "обработчик Action.Execute" и всё. Соответственно можно просто связать два элемента интерфейса, если у них есть какое-то взаимодействие, не связанное с контроллером/моделью, т.е. чисто UI-шное взаимодействие. |
|
Сообщ.
#1177
,
|
|
|
|
Цитата --Ins-- @ Цитата D_KEY @ DesweR, MVC вообще нет ни в каком виде в Delphi? А ты последние страницы читал? По диагонали. Меня GUI сейчас мало интересует. Впечатление об отсутствии MVC создалось по критике со стороны korvin'а |
|
Сообщ.
#1178
,
|
|
|
|
Цитата D_KEY @ По диагонали. Меня GUI сейчас мало интересует. Впечатление об отсутствии MVC создалось по критике со стороны korvin'а Отчасти да:Плюс реализация обработки событий для компонентов описывается в коде класса-контейнера (например SomeButton.OnClick в классе формы, на которой эта кнопка расположена) а не в коде самого компонента, что приводит к смешению обязанностей и следовательно несоблюдению MVC. Но в принципе писать в стиле MVC вполне можно. |
|
Сообщ.
#1179
,
|
|
|
|
korvin, в VCL класс формы, юнит формы сам выполняет роль контроллера для собственных визуальных элементов - обработать ввод и передать модели, или наоборот - сингал от модели - вывод в элементы управления. ИМХО - ничего плохого в этом нет. Бывает что у некоторых он еще и моделью является, но это уже говнокод.
|
|
Сообщ.
#1180
,
|
|
|
|
--Ins--, т.е. контроллер всегда совмещен с представлением?
|
|
Сообщ.
#1181
,
|
|
|
|
Цитата D_KEY @ --Ins--, т.е. контроллер всегда совмещен с представлением? Почему всегда? Не всегда, я например эту функцию как правило перекладываю на отдельную сущность. Но зачастую - форма представляет собой и вид, и контроллер, т.к. группирует все компоненты, управляет ими - ну сам бог велел. А какой еще код в классе формы писать, если не код контроллера? |
|
Сообщ.
#1182
,
|
|
|
|
Цитата --Ins-- @ korvin, в VCL класс формы, юнит формы сам выполняет роль контроллера для собственных визуальных элементов - обработать ввод и передать модели, или наоборот - сингал от модели - вывод в элементы управления. ИМХО - ничего плохого в этом нет. Бывает что у некоторых он еще и моделью является, но это уже говнокод. Плохое в этом есть: контроллер засорен кучей ненужных ему визуальных компонентов (панели, статичные лейблы и т.п.) и, как сказал D_KEY, совмещен с представлением, а следовательно имеем меньше гибкости и смешивание кода разных сфер ответственности, т.е. лапшекод. Добавлено Цитата --Ins-- @ Почему всегда? Не всегда, я например эту функцию как правило перекладываю на отдельную сущность. Но зачастую - форма представляет собой и вид, и контроллер, т.к. группирует все компоненты, управляет ими - ну сам бог велел. А какой еще код в классе формы писать, если не код контроллера? А зачем вообще код в классе формы писать? Максиму код поведения самой формы как визуального элемента (отрисовка и т.п.). |
|
Сообщ.
#1183
,
|
|
|
|
Цитата korvin @ Плохое в этом есть: контроллер засорен кучей ненужных ему визуальных компонентов (панели, статичные лейблы и т.п.) Это ж тебе не c#, здесь код создания компонентов не генерируется, компоненты из ресурсов загружаются. Так что никакого засорения нет, кроме объявления полей для каждого компонента - но эти поля нужны контроллеру - а как иначе обращаться к элементам? Так что тут я с тобой не согласен Цитата korvin @ а следовательно имеем меньше гибкости и смешивание кода разных сфер ответственности, т.е. лапшекод. Меньше гибкости - возможно, любой промежуточный уровень абстракции добавляет гибкости, но как говорится, все проблемы проектирования можно решить путем введения нового уровня абстракции кроме проблемы слишком большого числа уровней абстракций В общем, иногда эта твоя гибкость для простых случаев форм никому не нужна и нефиг городить огород. А смешения уровня ответственности, как я указал выше, не наблюдаю - считаю что форма (не окно формы на экране, а КЛАСС формы - как сущность в коде) вполне ответственна за управление своими элементами Добавлено Цитата korvin @ А зачем вообще код в классе формы писать? Вот собственно за этим Ни для чего другого - незачем. Класс формы с классами-компонентами связан отношением агрегирования. Ты когда пишешь некий класс-агрегат, ты же его клиентам не в виде набора запчастей предоставляешь, а в виде целостного, где внутри внешний класс управляет внутренними. Вот и здесь так же |
|
Сообщ.
#1184
,
|
|
|
|
Цитата --Ins-- @ Это ж тебе не c#, здесь код создания компонентов не генерируется, компоненты из ресурсов загружаются. Так что никакого засорения нет, кроме объявления полей для каждого компонента - но эти поля нужны контроллеру - а как иначе обращаться к элементам? Так что тут я с тобой не согласен А зачем мне в контроллере обращаться к куче панелей, которые только и нужны для создания раскладки и статическим лейблам? В крайнем случае для нужных можно сделать и Outlet'ы. Вот в IDEA можно связать с полями только те элементы интерфейса, с которыми необходимо работать, а все остальные не связывать, поэтому там класс формы значительно менее захламлен. Добавлено Цитата --Ins-- @ Меньше гибкости - возможно, любой промежуточный уровень абстракции добавляет гибкости, но как говорится, все проблемы проектирования можно решить путем введения нового уровня абстракции кроме проблемы слишком большого числа уровней абстракций В общем, иногда эта твоя гибкость для простых случаев форм никому не нужна и нефиг городить огород. А смешения уровня ответственности, как я указал выше, не наблюдаю - считаю что форма (не окно формы на экране, а КЛАСС формы - как сущность в коде) вполне ответственна за управление своими элементамиО да, MVC -- это такой большой набор абстракций, аж жуть. Добавлено Цитата --Ins-- @ Вот собственно за этим Ни для чего другого - незачем. Класс формы с классами-компонентами связан отношением агрегирования. Ты когда пишешь некий класс-агрегат, ты же его клиентам не в виде набора запчастей предоставляешь, а в виде целостного, где внутри внешний класс управляет внутренними. Вот и здесь так жеДык а нафиг тогда в классе формы описывать поведение других компонентов (Лейблов, едитов, баттонов и т.д.)? Зачем вообще эта нелепая возможность? |
|
Сообщ.
#1185
,
|
|
|
|
Цитата korvin @ Цитата [S]mike @ А все равно приходится. У меня в дельфях, например, есть свой фреймворк-обертка над TAction ![]() Можешь чуть подробней описать, что он добавляет к TAction'ам? Ну вот например есть общий (не путать с абстрактным) класс TListCtrl, служащий для табличного отображения данных. Он по сути является контроллером, позволяет подменять свою имплементацию (ListView, VirtualTreeView). И он реализует набор стандартных действий с помощью TAction. Отличие от дельфийского подхода в том, что компонент генерируется в рантайме, а экшены просто присваиваются обработчикам. Есть еще всякие методы для динамической генерации экшенов. Просто со временем понимаешь, что сложно проектировать сложные, но в то же время гибкие приложения, используя обычный дельфи-вей: накидал компонентов, прописал обработчики. Скорее гуй должен служить легкой оболочкой для связывания уже имеющегося функционала - вот чему посвящена моя библиотека (я ее называю RCL - Runtime Components Library). В то время как VCL только запутывает функционал. В этом, имхо, и одна из основных проблем дельфей - гуй получается первичен, вот многие и концентрируют функционал внутри одного модуля, в котором потом ногу сломишь. Хотя я ни в коем случае не противник визуального построения форм (а в дельфях встречаются и такие фанаты ).Вот например как у меня выглядит код: ![]() ![]() FList := CreateListControl(Self, DataEvent, nil, [ColumnRec(rsExpression, 350), ColumnRec(rsResult, 100, 150, 80)]); FList.PopupMenu := CreatePopupMenu(FList, [ FList.GetDefaultAction(FActionList, ListUse, rsUse), nil, FList.GetDeleteAction(FActionList, ListDelete), FList.GetClearAction(FActionList, ListDelete) ], 0); FList.MultiSelect := True; Все стандартно, удобно, единообразно и очень гибко. Добавлено Цитата --Ins-- @ Это ж тебе не c#, здесь код создания компонентов не генерируется, компоненты из ресурсов загружаются. Так что никакого засорения нет, кроме объявления полей для каждого компонента - но эти поля нужны контроллеру - а как иначе обращаться к элементам? Так что тут я с тобой не согласен Ну начнем с того, что все компоненты на форме захламляют класс формы. Во-вторых, они все в published-секции, то есть нарушаются основные догмы ООП. Цитата korvin @ А зачем мне в контроллере обращаться к куче панелей, которые только и нужны для создания раскладки и статическим лейблам? В крайнем случае для нужных можно сделать и Outlet'ы. Справедливости ради хочу сказать. Если в Object Inspector стереть Name компонента, то для него не будет генерироваться объект в классе формы. НО! 1) Эта возможность весьма неявная, не знаю даже, написано ли об этом в хелпе. 2) Как и все в дельфях - иногда глючит. 3) Нельзя делать связи между компонентами, так как компонент теряет свое имя. Вот представим ситуацию: есть компонент PopupMenu, который не используется в коде. Но присвоить его какому-то компоненту на форме будет нельзя! Придется "терпеть" его в коде формы. 4) Нужно в initialization прописывать в RegisterClasses те компоненты, которые лежат на форме, но не имеют имен (так как их функционал иначе будет исключен линкером). Добавлено Цитата korvin @ С другой стороны Xcode/InterfaceBuilder прекрасно парсит описания классов Objective C и позволяет работать с ними средствами гуя без всяких RegisterComponents, спецификатора published, наследования от TComponent(хз, может и не обязательно, но я так понимаю, что без наследованиия придется много ручками поработать?) и прочих Согласен. Библиотека компонентов в целом в Delphi крайне не продумано. Тебя принуждают иметь зоопарк. Нельзя в одном проекте использовать одни компоненты, а в другом другие. И самое худшее - нельзя в проекте использовать СВОИ компоненты. Нужно делать пакет, который ставить вместе со всеми остальными. И потом искать свои компоненты среди 1000 других. Ужас! |