Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol / 10 сообщений из 10, страница 1 из 1
30.07.2020, 18:50
    #39985415
mkr
mkr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Смотрю проект, при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery. Так вот в этих popupmenu и requery находится куча if-ов выполняющих действие в зависимости от установившейся страницы.
Есть ли возможность, все эти действия как-то вынести отдельно?
в теории, все действия для каждой TabSheet можно вынести в onShow, есть ли минусы?
...
Рейтинг: 0 / 0
30.07.2020, 19:30
    #39985424
Victor Cookin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
mkr,

Совершенно всё равно где вызывать, разве если Pages могут появляться динамически, то с OnShow - сложнее.
...
Рейтинг: 0 / 0
30.07.2020, 19:40
    #39985426
DimaBr
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Вместо IF-ов можно использовать CASE, но хрен редьки не слаще. С IF-ами хоть понятно к какой вкладке код
...
Рейтинг: 0 / 0
30.07.2020, 19:41
    #39985427
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
mkr
при переключении страницы в pagecontrol, вызывается несколько функций, выполняющих определённые, базовые действия: пересоздают popupmenu делает requery.

Когда коту нефиг делать, он пересоздаёт popupmenu...

mkr
в теории, все действия для каждой TabSheet можно вынести в onShow

В OnShow чего?

mkr
Так вот в этих popupmenu и requery находится куча if-ов выполняющих действие в зависимости от установившейся страницы. Есть ли возможность, все эти действия как-то вынести отдельно?

Есть куча возможностей отрефакторить невменяемый код. Но чтобы ответить, как именно это стоит сделать - нужно смотреть на этот код и на требования к интерфейсу, отвечать в общем виде бессмысленно.
...
Рейтинг: 0 / 0
31.07.2020, 15:05
    #39985592
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
У меня это сделано так:

1. К каждой вкладке привязан объект-наследник некоторого TCustomTabControl
2. При переключении вкладки ссылка на текущий объект сохраняется в FCurrentControl: TCustomTabControl
3. Все действия на вкладке вызывают методы

2 пункт можно убрать, если объект хранить в Tag вкладки
...
Рейтинг: 0 / 0
31.07.2020, 15:25
    #39985609
rgreat
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Вместо кучи if-ов можно использовать for.
...
Рейтинг: 0 / 0
01.08.2020, 13:00
    #39985774
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант
лучше (удобнее в сопровождении) независимых обработчиков
(OnShow и пр.) отдельных вкладок. Хотя разумнее рефакторить,
конечно, если есть время и нет задач поважнее. Например, надо
посмотреть, а чем там код для вкладок собсно отличается -
возможно, его можно упростить/объединить. Возможно, сам
интерфейс (пейджконтрол или некоторые вкладки) можно
упростить/улучшить. И т.д.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.08.2020, 13:22
    #39985777
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Гаджимурадов Рустам
Мои 5 копеек - что If-ы, что CASE, что другой спагетти-вариант

При этих словах Дейкстра перевернулся в гробу и подумал много тёплых ласковых слов про современных разработчиков.

Гаджимурадов Рустам
Например, надо посмотреть, а чем там код для вкладок собсно отличается

Провангую, что

Код: pascal
1.
2.
3.
4.
procedure RefreshQuery(AQuery: TQuery; ATabSheet: TTabSheet);
begin
  if Assigned(ATabSheet) and (ATabSheet.PageControl.ActivePage = ATabSheet) then RefreshQuery(AQuery);
end;


снимет половину их необходимости в if-ах. Про более серьёзные улучшения я даже не собираюсь начинать.
...
Рейтинг: 0 / 0
01.08.2020, 13:50
    #39985783
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
softwarer> При этих словах

ЯННП. Не спагетти или что ?

> Провангую, что

Нет смысла гадать. С этой кверей ведь всё равно
ещё что-то кроме открытия делается, наверняка -
заполнение параметров, загрузка чего-то там и пр.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
01.08.2020, 14:06
    #39985788
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol
Гаджимурадов Рустам
ЯННП. Не спагетти или что ?

if-ы - это как раз то, что предлагал Дейкстра для борьбы со спагетти.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ОФФТОП. Как избавиться от кучи if-ов при смене pagecontrol / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]