-
Добрый день.
частенько код обработки (нажать на батон к примеру) занимает несколько сот строк, приходится переность код в отдельный модуль.
при этом нужно добавлять кучу ссылок на основную форму (типа: uMainForm.Memo1.Text) что несколько утомляет.
Вопрос : нет ли способа в РАД ХЕ10 как то это дело ускорить, типа автоматизировать.
-
Пример бы не помешал, что конкретно не устраивает.
На мой взгляд, все правильно получается:
- код переносишь,
- uMainForm.Memo1.Text не переносишь.
Тут не ускорять надо, а думать,
чтобы отделить работу с данными от визуальной части программы.
-
> типа автоматизировать
- мечта работодателя - программирует сразу дизайнер, а непонятно чем занимающийся отдел - на вольные хлеба...
type
TButton1Input = record
...
end;
TButton1Output = record
...
end;
...
function button1process(const input: TButton1Input; out output: TButton1Output): boolean;
{
function buttonXprocess(const input: TButton2Input): TButton2Output; overload;
function buttonXprocess(const input: TButton3Input): TButton3Output; overload;
}
procedure TMainForm.Button1Click(Sender: TObject);
function stamp(): TButton1Input;
begin
Result.textBefore:= Memo1.Text;
...
end;
procedure apply(const res:TButton1Output);
begin
Memo1.Text:= res.textAfter;
...
end;
var output: TButton1Output
begin
if( button1process(stamp(), output) )then
apply(output);
end;
{
procedure TMainForm.Button2Click(Sender: TObject);
function stamp(): TButton2Input;
begin
...
end;
procedure apply(const res:TButton2Output);
begin
...
end;
begin
apply(buttonXprocess(stamp()));
end;
}
- var-семантика и тест-кейс - домашнее задание...
-
Можно обернуть код в
With uMainForm do begin
end;
Но стоит ли так делать - решать Вам.
-
Ну в общем случае ссылка на главную форму Дельфи-приложения
это Application.MainForm, но что имел в виду автор вопроса не понятно.
-
Описывать как функции и передавать параметром нужные объекты.
Ссылок на формы в идеале вообще не должно быть в проекте.
-
> Pcrepair © (05.11.18 18:12)
> частенько код обработки (нажать на батон к примеру) занимает
> несколько сот строк, приходится переность код в отдельный модуль.
Почему приходится?
Я не переношу.
-
Вопрос хороший. А вот хороших ответов я пока что не видел.
Вот есть у меня форма, на ней есть кнопки для вызова калькулятора. Каждый калькулятор он специфичный, для примера расчёт азимута. На модальной форме с калькулятором имеет 3 кнопки, отмена, приметь, посчитать плюс крестик.
В форму надо передать 2 параметра забрать 1. В зависимости от modalResult главная форма либо принимает результат, либо отвергнуть.
1. Идея первая перенести всё во вторую форму. Сделать ссылки на элементы основной формы. Для тех кто работает долго с проектами понятно что это неудобно. Там переделать тут поправь, а там ссылки закольцивались. Да тестировать.
Первое это слишком тесно связанный код.
Надо разделить отображение и представление модель - MVC.
2. MVC очень неудобно, да и конвертирование из текст в данные и обратно съедает точность. Но этот объект надо задекларировать, сформировать, создать. Так ещё надо и результирующий объект получить. А после объекты надо разрушить.
Тут уже предложили структуры. Но хрен редьки неслащи. Выиграете вы 2 строчки а толку?
3. Инвертировать управление. Предлагается вынести проверку modalResult в модальную форму. После вызова форма должна возвращать корректное значение результирующего объекта.
Так как сигнал-слот в Delphi отсутствует, то их можно заменить событиями.
А так что можно сказать. У Delphi очень хилый редактор в плане рефакторинга куча ненужных элементов и нет нужных.
-
> Павиа (13.11.18 13:22) [7]
>
> Вопрос хороший. А вот хороших ответов я пока что не видел.
>
>
Вопрос ТС малограмотный и непонятный из-за этого. Ваш вопрос тоже непонятный. Только гораздо более непонятный.
-
> Павиа (13.11.18 13:22) [7]
Может стоит, в конце концов, основы ооп почитать?
-
> > Павиа (13.11.18 13:22) [7]
>
> Может стоит, в конце концов, основы ооп почитать?
А может кому-то стоит по пробовать по применять эти основы. Вот начитаются википедии и думают, что знают как надо. А у самих в голове не бум-бум и практики 0.
Я основы прекрасно знаю. В отличии от некоторых. Более того знаю чем они отличаются для разных языков. Более того прекрасно знаю и продвинутый уровень ООП. Осведомлён о наличие в интернете кучи готового кода и провёл сравнительный анализ.
Но избыточность и сложность ООП никак не упрощает труд программист который ежедневно должен делать вот такие вот перестановки в коде.
Почему в рефакторинге есть средства для выноса функции в объект, но нет средств для переменных в объект? Как по мне это гораздо более нужная вещь.
-
> Павиа (14.11.18 15:40) [10]
>
>
> > > Павиа (13.11.18 13:22) [7]
> >
> > Может стоит, в конце концов, основы ооп почитать?
>
> А может кому-то стоит по пробовать по применять эти основы.
> Вот начитаются википедии и думают, что знают как надо.
> А у самих в голове не бум-бум и практики 0.
>
> Я основы прекрасно знаю.
Извините, сомневаюсь. Сомневаюсь что вы внимательно прочитали вопрос ТС.
-
> MVC очень неудобно, да и конвертирование из текст в данные
> и обратно съедает точность
а что по вашему есть данные?
-
А про наследование форм забыли?
-
> Павиа (13.11.18 13:22) [7]
> Вопрос хороший. А вот хороших ответов я пока что не видел.
>
> Вот есть у меня форма, на ней есть кнопки для вызова калькулятора.
> Каждый калькулятор он специфичный, для примера расчёт
> азимута.
.....
>
> А так что можно сказать. У Delphi очень хилый редактор
> в плане рефакторинга куча ненужных элементов и нет нужных.
Я только одно из написанного не понял: разные калькуляторы - это следствие хилого редактора Delphi, или наличие модальной формы, проверяющей modalResult - есть следствие того, что MVC очень неудобно?