-
> А у тебя тоже все статично.
Ну а как без этого, хоть ListClass не править.
> Захочешь добавить будешь править свой
Этим мне и ненравится кейс… О чем собссно и вся ветка с самого начала…
Имел это ввиду
-
Я не знаю что еще можно добавлять
Я вроде все написал.
По поводу статичности - не понятно о какой динамике речь. Что-то - в любом случае править: или код программы или метаданные в виде внешнего файла, к примеру (это для особых ценителей настроек без перекомпиляции).
Про перечисления - я лишь говорю о том, что не надо тут использовать строковые константы. Просто не по делу тут строки.
Короче принципиально архитектурно я не вижу как это все можно изменить так, чтобы при добавлении/изменении ничего еще и не править :)
-
> ничего
Не ничего, а мак. просто. :) Строковые мож и прям не поделу
-
> Kolan © (04.03.08 16:00) [42]
> Не ничего, а мак. просто. :)
Так опять же - это от ситуации зависит.
Если переход межту отдельными шагами весьма не тривиален - то от case - не отвертеться. Ну либо от каких-либо метаданных, которые по сути будут этот case описывать. Усложняя "ядро".
Если же логика простейшая - то [11].
-
> Усложняя "ядро".
Да нет здесь никакого усложнения вся логика перехода может быть посредоточена NodeStep, который запрашивает у контролера нужный переход по строке, по классовому типу и т.д.
Причем переход может быть статичен,
либо динамический передача параметра перехода (следующего шага) в конструкторе. Задача контролера выполнить действие по запросу нода, предоставить экземпляр типа по строке или классовому типу. И все. Причем действительно контроллер отвязан от логики (можно не перекомпилировать)
А логика задается в Шагах.
-
> oxffff © (04.03.08 19:40) [44]
А шаги задаются на лету (DLL).
Например шаг
Выбор директории (класс TStepDirectorySelection(TAbstractStepClass)), где
TAbstractStepClass=class of TAbstractStepClass;
Controler.Add(TStepDirectorySelection.create(TStepConfirm) <-параметр следующий шаг.
Причем не обязательно определять порядок создания.
Шаги можно доинициализировать в порядке добавления других шагов (естественно предусмотрев это в виде контракта).
-
> oxffff © (04.03.08 19:47) [45]
Sorry
(TAbstractStepClass)) = (TAbstractStep))
TAbstractStepClass=class of TAbstractStep;
-
Автор, а у тебя сколько шагов и сколько различных форм вызывается ?
-
> Автор, а у тебя сколько шагов и сколько различных форм вызывается
> ?
Где-то 25 ±5.
Из них 1-2 используются в нескольких местах.
-
Kolan © (05.03.08 08:59) [48]
Это как понимать ? Некоторое действие будет выполняться за 25-30 шагов ?
Никому плохо не станет ?
-
Нет, это всего возможных. Самое доинное 5 шагов.
-
> Самое доинное — 5 шагов.
И чего ты маешься ? Классы-фигасы. Сделал case и радуешься. Код вполне сопровождаемый получится.
Keep It Simple Stupid
-
Простите чайника, может, я чего-то не понимаю, но почему нельзя PageControl использовать? И, конечно, Sender, а не case? Это же, как я понял, получится что-то вроде телефонной платилки? Просто я когда-то задавал аналогичный вопрос и мне ответили, что это и есть общепринятый способ. TabVisible := False и все. И тут хоть 100 шагов можно вставить, если пользователь не уйдет. И последовательность как угодно менять. и обращаться к ним хоть через Sender, хоть через ActivePageIndex
-
> PageControl использовать
Нехочется держать все в памяти. Аппарат гораздо менее мощный чем платилка.
-
> Kolan © (05.03.08 16:22) [53]
> Нехочется держать все в памяти.
А я бы все же замерил. Памяти потребление.
Т.к. если аппарат будет заниматься только тем, что круглые сутки отображать одну из этих 25 форм - то скорее эффективнее их сразу все создать (если в память влезут и скорее всего влезут), нежели каждый раз напрягать менеджер кучи перераспределять адресное пространство.
Еще не известно не загнется ли этот менеджер через месяц непрерывной работы приолжения постоянно перераспределяя память (в смысле - не фрагментируется ли память до полного изнеможения).
-
Но все равно. PageControl - по сути, те же формы. 25 - это очень даже пристойное число и сразу их создать, если прога никогда не выключается - вполне разумное решение. Я верю, что мощнее, но принцип-то тот же: нажмите кнопочку 1, посмотрите, сколько вы ошибок наделали, вернитесь к шагу 1 и т. д. Это тот же принцип, что и мастера установки чего-нибудь.
>если в память влезут Так ведь сама форма (экземпляр) не очень много занимает в памяти, а класс формы там так и так висит. А потом ну не байты же вы считаете.
-
> что круглые сутки отображать одну из этих 25 форм
Не это некй измеритель. То есть формы сменяют друг друга. Программа то раьботает с БД, то с ком портом
> Сделал case и радуешься.
Я его и сделал, только вот строки использовал в кач состояни(наверно переделаю). А как предлагается?
> Но все равно. PageControl
У меня есть даже самописный компонент такой. Там вся логика получается в событиях OnExecute (так работают большиство визардов) и.т.д. Опыт паказал, что код такой трудно сопроваждать.
Кроме того в визаде только далее и назад, ну отмена, а тут у меня хз сколько событий будет.
-
> Kolan © (05.03.08 20:33) [56]
>
> > что круглые сутки отображать одну из этих 25 форм
>
> Не это некй измеритель. То есть формы сменяют друг друга.
> Программа то раьботает с БД, то с ком портом…
>
>
Ну и пусть формы меняются. Тем более KSergey © (05.03.08 17:37) [54].
А при чём тут БД или Сом-порт?
>
> У меня есть даже самописный компонент такой. Там вся логика
> получается в событиях OnExecute (так работают большиство
> визардов) и.т.д. Опыт паказал, что код такой трудно сопроваждать.
>
>
No comments!
-
> No comments!
Почему?
-
> Kolan © (06.03.08 09:24) [58]
> > No comments!
> Почему?
Сам же написал: "такой трудно сопроваждать". И это понятно, т.к. вся логика разбросана по разным местам.