Конференция "Основная" » Перенос кода из основной формы в модуль
 
  • Pcrepair © (05.11.18 18:12) [0]
    Добрый день.
    частенько код обработки (нажать на батон к примеру) занимает несколько сот строк, приходится переность код в отдельный модуль.
    при этом нужно добавлять кучу ссылок на основную форму (типа: uMainForm.Memo1.Text) что несколько утомляет.

    Вопрос : нет ли способа в РАД ХЕ10 как то это дело ускорить, типа автоматизировать.
  • Sha © (06.11.18 00:50) [1]
    Пример бы не помешал, что конкретно не устраивает.

    На мой взгляд, все правильно получается:
    - код переносишь,
    - uMainForm.Memo1.Text не переносишь.

    Тут не ускорять надо, а думать,
    чтобы отделить работу с данными от визуальной части программы.
  • han_malign © (07.11.18 12:56) [2]

    > типа автоматизировать

    - мечта работодателя - программирует сразу дизайнер, а непонятно чем занимающийся отдел - на вольные хлеба...

    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-семантика и тест-кейс - домашнее задание...
  • Styx © (09.11.18 19:53) [3]
    Можно обернуть код в
    With uMainForm do begin
    end;


    Но стоит ли так делать - решать Вам.
  • Германн © (10.11.18 02:20) [4]
    Ну в общем случае ссылка на главную форму Дельфи-приложения
    это Application.MainForm, но что имел в виду автор вопроса не понятно.
  • Лори (12.11.18 08:35) [5]
    Описывать как функции и передавать параметром нужные объекты.
    Ссылок на формы в идеале вообще не должно быть в проекте.
  • KSergey © (12.11.18 08:37) [6]
    > Pcrepair ©   (05.11.18 18:12) 
    > частенько код обработки (нажать на батон к примеру) занимает
    > несколько сот строк, приходится переность код в отдельный модуль.

    Почему приходится?
    Я не переношу.
  • Павиа (13.11.18 13:22) [7]
    Вопрос хороший. А вот хороших ответов я пока что не видел.

    Вот есть у меня форма, на ней есть кнопки для вызова калькулятора.  Каждый калькулятор он специфичный, для примера расчёт азимута.  На модальной форме с калькулятором имеет 3 кнопки, отмена, приметь, посчитать плюс крестик.
    В форму надо передать 2 параметра забрать 1. В зависимости от modalResult главная форма либо принимает результат, либо отвергнуть.  

    1. Идея первая перенести всё во вторую форму.  Сделать ссылки на элементы основной формы. Для тех кто работает долго с проектами понятно что это неудобно. Там переделать тут поправь, а там ссылки закольцивались. Да тестировать.

    Первое это слишком тесно связанный код.
    Надо разделить отображение и представление модель - MVC.

    2. MVC очень неудобно, да и конвертирование из текст в данные и обратно съедает точность. Но этот объект надо задекларировать, сформировать, создать.  Так ещё надо и результирующий объект получить. А после объекты надо разрушить.

    Тут уже предложили структуры.  Но хрен редьки неслащи. Выиграете вы 2 строчки а толку?

    3. Инвертировать управление.  Предлагается вынести проверку modalResult  в модальную форму. После вызова форма должна возвращать корректное значение результирующего объекта.  
    Так как сигнал-слот в  Delphi отсутствует, то их можно заменить событиями.

    А так что можно сказать.  У Delphi очень хилый редактор в плане рефакторинга куча ненужных элементов и нет нужных.
  • Германн © (14.11.18 02:23) [8]

    > Павиа   (13.11.18 13:22) [7]
    >
    > Вопрос хороший. А вот хороших ответов я пока что не видел.
    >
    >

    Вопрос ТС малограмотный и непонятный из-за этого. Ваш вопрос тоже непонятный. Только гораздо более непонятный.
  • Плохиш © (14.11.18 14:55) [9]

    > Павиа   (13.11.18 13:22) [7]

    Может стоит, в конце концов, основы ооп почитать?
  • Павиа (14.11.18 15:40) [10]

    > > Павиа   (13.11.18 13:22) [7]
    >
    > Может стоит, в конце концов, основы ооп почитать?

    А может кому-то стоит по пробовать по применять эти основы. Вот начитаются википедии и думают, что знают как надо. А у самих в голове не бум-бум и практики 0.

    Я основы прекрасно знаю. В отличии от некоторых. Более того знаю чем они отличаются для разных языков. Более того прекрасно знаю и продвинутый уровень ООП. Осведомлён о наличие в интернете кучи готового кода и провёл сравнительный анализ.
    Но избыточность и сложность ООП никак не упрощает труд программист который ежедневно должен делать вот такие вот перестановки в коде.

    Почему в рефакторинге есть средства для выноса функции в объект, но нет средств для переменных в объект? Как по мне это гораздо более нужная вещь.
  • Германн © (15.11.18 02:40) [11]

    > Павиа   (14.11.18 15:40) [10]
    >
    >
    > > > Павиа   (13.11.18 13:22) [7]
    > >
    > > Может стоит, в конце концов, основы ооп почитать?
    >
    > А может кому-то стоит по пробовать по применять эти основы.
    >  Вот начитаются википедии и думают, что знают как надо.
    > А у самих в голове не бум-бум и практики 0.
    >
    > Я основы прекрасно знаю.

    Извините, сомневаюсь. Сомневаюсь что вы внимательно прочитали вопрос ТС.
 
Конференция "Основная" » Перенос кода из основной формы в модуль
Есть новые Нет новых   [94807   +152][b:0.001][p:0.002]