Конференция "Основная" » Разбить .pas-файл одной формы на несколько pas-файлов [D5]
 
  • KSergey © (05.06.18 09:22) [0]
    Есть некий старый проект.
    В нём главная форма - это всё, что есть. Там уже несколько десятков тысяч строк
    И есть обоснованное подозрение, что D5 на таком проекте начинает дурить как при компиляции, так и в отладке.

    Но это всё одна бешенная форма. И это всё её обработчики.

    Вопрос: как бы разбить этот код на несколько pas-файлов?
    Причем include не годится, на сколько я понимаю, всё одно это ж в итоге одна единица компиляции (один .dcu) выйдет.

    Какие тут есть варианты?
  • KSergey © (05.06.18 09:25) [1]
    Мне на ум пришло только вариант с наследованием формы в виде нескольких наследников (без смысла, чисто формально), при этом в каждом из них определить нужную часть кода/обработчиков.
    Но тоже не просто, учитывая, что часть обработчиков для некоторых компонентов на форме можно нечаянно переопределить в потомках.
  • icp © (05.06.18 10:17) [2]
    инклудами например
  • icp © (05.06.18 10:22) [3]
    произвольный кусок паса хоть посредине функции порезанного сохраняем в отдельный файл.
    на месте вырезки вставляем инклуд.
    и так хоть миллиард раз
  • KSergey © (05.06.18 10:37) [4]
    Верно ли я понимаю, что заинклуденные куски будут компиляться отдельно друг от друга?
  • icp © (05.06.18 10:49) [5]
    отдельных дцу не будет.
    для компилера это будет по прежнему одним пасом
  • icp © (05.06.18 10:56) [6]
    кстати а почему дурить будет д5 и не будет xe8 например?
    у обеих нету ни памяти ни частоты.
    это же просто код.
  • Плохиш © (05.06.18 11:14) [7]

    > KSergey ©   (05.06.18 09:22)  

    Насколько я знаю умные слова, это называется "рефакторинг кода".

    PS. Вот не верю я, что логику этих "несколько десятков тысяч строк" нельзя перенести в отдельные модули и вызывать в обработчиках только функции из модулей.
  • KSergey © (05.06.18 11:44) [8]
    Можно, конечно, код обработчиков скопипастить в отдельные модули даже "не вникая", в принципе вариант, конечно.
  • KSergey © (05.06.18 11:45) [9]
    > icp ©   (05.06.18 10:56) [6]
    > кстати а почему дурить будет д5 и не будет xe8 например?

    Я где-то утверждал, что в xe8 не будет?
  • KSergey © (05.06.18 11:45) [10]
    Речь лишь про то, что под этот проект есть D5.
    Про неё и вопрос.
  • Inovet © (05.06.18 11:59) [11]
    > [8] KSergey ©   (05.06.18 11:44)
    > Можно, конечно, код обработчиков скопипастить в отдельные модули даже "не вникая"

    Если вникать, наверное можно выделить стандартные модули из кучи. Ввод, вывод, расчёт, сохранение данных, загрузка данных, общие утилиты, которые может и не относятся прямо вот только к этой форме. В зависимости от сложности и наличия. В модулях тоже могут оказаться какие-то куски общего характера, можно выделить.

    А вообще, действительно, компилятору и линкеру дожно быть без разницы какой размер модуля. Не террабайты же там. Наверное что-то тут другое, но не размер.
  • KSergey © (05.06.18 12:29) [12]
    > Inovet ©   (05.06.18 11:59) [11]
    > Если вникать, наверное можно выделить стандартные модули
    > из кучи. Ввод, вывод, расчёт, сохранение данных, загрузка
    > данных, общие утилиты, которые может и не относятся прямо
    > вот только к этой форме. В зависимости от сложности и наличия.
    >  В модулях тоже могут оказаться какие-то куски общего характера,
    >  можно выделить.

    извините, но рука лицо
    Не к вам лично, но как же задолбала эта мода на рефакторинг в индустрии.
    Постоянный рефакторинг ради рефакторинга. Непрекращающйися рефакторинг.
    Самое смешное, что постоянно теряют то тут, то там куски функционала, но первым делом каждый хочет что-нибудь да порефакторить.
  • KSergey © (05.06.18 12:31) [13]
    > Inovet ©   (05.06.18 11:59) [11]
    > А вообще, действительно, компилятору и линкеру дожно быть
    > без разницы какой размер модуля. Не террабайты же там. Наверное что-то тут другое, но не размер.

    Я таки рискну предположить, что именно размер. Ну или количество элементов на форме - тоже вариант.
  • Inovet © (05.06.18 12:40) [14]
    > [12] KSergey ©   (05.06.18 12:29)
    > извините, но рука лицо

    Пардон, но ты же спросил как разбить. Вот так других вариантов нет, если конечно не наугад куски повыкусывать и раскидать по модулям.
  • Inovet © (05.06.18 12:41) [15]
    > [13] KSergey ©   (05.06.18 12:31)
    > Я таки рискну предположить, что именно размер. Ну или количество
    > элементов на форме - тоже вариант.

    Мне первое пришло в голову - посмотреть по тексту изменение опций компиляции. Пример не придумаю на ходу, чтобы глючил.
  • Inovet © (05.06.18 12:46) [16]
    Или, тоже рука лицо, взять этот модуль и начать выкусывать без переноса в другие куски, конечно осмысленно более или менее. Глюк должен пропасть на некотором шаге, начать восстанавливать ранее выкушенные но этот придержать. Глядишь и найдётся проблема.
  • KSergey © (05.06.18 12:47) [17]
    Нет здесь "простого демонстрационного примера".

    Хорошо, таки с живейшим интересом выслушаю идеи по механическому разбиению на чисто формально и технически более мелкие куски.

    > Inovet ©   (05.06.18 12:40) [14]
    > Пардон, но ты же спросил как разбить. Вот так других вариантов
    > нет, если конечно не наугад куски повыкусывать и раскидать по модулям.

    Это всё методы одной формы.
    Отсюда и вопрос как именно раскидать.
    Один вариант был выше предложен: из обработчиков код тупо перенести в функции отдельного модуля.
    Вполне себе вариант.

    Есть ли еще варианты?
  • icp © (05.06.18 13:04) [18]
    вариант выше не предполагает модуля.
    те файлы инклудов не будут самостийными пас модулями. это просто текстовые файлы с кусками кода на паскале
  • KSergey © (05.06.18 13:20) [19]
    > icp ©   (05.06.18 13:04) [18]
    > вариант выше не предполагает модуля.
    > те файлы инклудов не будут самостийными пас модулями.

    Про инклуды уже выяснили, не рассматриваем.
    Я про вариант модулей с вынесенными в них телами обработчиков в виде функций.
 
Конференция "Основная" » Разбить .pas-файл одной формы на несколько pas-файлов [D5]
Есть новые Нет новых   [93443   +21][b:0.002][p:0.003]