-
Есть некий старый проект. В нём главная форма - это всё, что есть. Там уже несколько десятков тысяч строк И есть обоснованное подозрение, что D5 на таком проекте начинает дурить как при компиляции, так и в отладке.
Но это всё одна бешенная форма. И это всё её обработчики.
Вопрос: как бы разбить этот код на несколько pas-файлов? Причем include не годится, на сколько я понимаю, всё одно это ж в итоге одна единица компиляции (один .dcu) выйдет.
Какие тут есть варианты?
-
Мне на ум пришло только вариант с наследованием формы в виде нескольких наследников (без смысла, чисто формально), при этом в каждом из них определить нужную часть кода/обработчиков. Но тоже не просто, учитывая, что часть обработчиков для некоторых компонентов на форме можно нечаянно переопределить в потомках.
-
инклудами например
-
произвольный кусок паса хоть посредине функции порезанного сохраняем в отдельный файл. на месте вырезки вставляем инклуд. и так хоть миллиард раз
-
Верно ли я понимаю, что заинклуденные куски будут компиляться отдельно друг от друга?
-
отдельных дцу не будет. для компилера это будет по прежнему одним пасом
-
кстати а почему дурить будет д5 и не будет xe8 например? у обеих нету ни памяти ни частоты. это же просто код.
-
> KSergey © (05.06.18 09:22)
Насколько я знаю умные слова, это называется "рефакторинг кода".
PS. Вот не верю я, что логику этих "несколько десятков тысяч строк" нельзя перенести в отдельные модули и вызывать в обработчиках только функции из модулей.
-
Можно, конечно, код обработчиков скопипастить в отдельные модули даже "не вникая", в принципе вариант, конечно.
-
> icp © (05.06.18 10:56) [6] > кстати а почему дурить будет д5 и не будет xe8 например?
Я где-то утверждал, что в xe8 не будет?
-
Речь лишь про то, что под этот проект есть D5. Про неё и вопрос.
-
> [8] KSergey © (05.06.18 11:44) > Можно, конечно, код обработчиков скопипастить в отдельные модули даже "не вникая"
Если вникать, наверное можно выделить стандартные модули из кучи. Ввод, вывод, расчёт, сохранение данных, загрузка данных, общие утилиты, которые может и не относятся прямо вот только к этой форме. В зависимости от сложности и наличия. В модулях тоже могут оказаться какие-то куски общего характера, можно выделить.
А вообще, действительно, компилятору и линкеру дожно быть без разницы какой размер модуля. Не террабайты же там. Наверное что-то тут другое, но не размер.
-
> Inovet © (05.06.18 11:59) [11] > Если вникать, наверное можно выделить стандартные модули > из кучи. Ввод, вывод, расчёт, сохранение данных, загрузка > данных, общие утилиты, которые может и не относятся прямо > вот только к этой форме. В зависимости от сложности и наличия. > В модулях тоже могут оказаться какие-то куски общего характера, > можно выделить.
извините, но рука лицо Не к вам лично, но как же задолбала эта мода на рефакторинг в индустрии. Постоянный рефакторинг ради рефакторинга. Непрекращающйися рефакторинг. Самое смешное, что постоянно теряют то тут, то там куски функционала, но первым делом каждый хочет что-нибудь да порефакторить.
-
> Inovet © (05.06.18 11:59) [11] > А вообще, действительно, компилятору и линкеру дожно быть > без разницы какой размер модуля. Не террабайты же там. Наверное что-то тут другое, но не размер.
Я таки рискну предположить, что именно размер. Ну или количество элементов на форме - тоже вариант.
-
> [12] KSergey © (05.06.18 12:29) > извините, но рука лицо
Пардон, но ты же спросил как разбить. Вот так других вариантов нет, если конечно не наугад куски повыкусывать и раскидать по модулям.
-
> [13] KSergey © (05.06.18 12:31) > Я таки рискну предположить, что именно размер. Ну или количество > элементов на форме - тоже вариант.
Мне первое пришло в голову - посмотреть по тексту изменение опций компиляции. Пример не придумаю на ходу, чтобы глючил.
-
Или, тоже рука лицо, взять этот модуль и начать выкусывать без переноса в другие куски, конечно осмысленно более или менее. Глюк должен пропасть на некотором шаге, начать восстанавливать ранее выкушенные но этот придержать. Глядишь и найдётся проблема.
-
Нет здесь "простого демонстрационного примера".
Хорошо, таки с живейшим интересом выслушаю идеи по механическому разбиению на чисто формально и технически более мелкие куски.
> Inovet © (05.06.18 12:40) [14] > Пардон, но ты же спросил как разбить. Вот так других вариантов > нет, если конечно не наугад куски повыкусывать и раскидать по модулям.
Это всё методы одной формы. Отсюда и вопрос как именно раскидать. Один вариант был выше предложен: из обработчиков код тупо перенести в функции отдельного модуля. Вполне себе вариант.
Есть ли еще варианты?
-
вариант выше не предполагает модуля. те файлы инклудов не будут самостийными пас модулями. это просто текстовые файлы с кусками кода на паскале
-
> icp © (05.06.18 13:04) [18] > вариант выше не предполагает модуля. > те файлы инклудов не будут самостийными пас модулями.
Про инклуды уже выяснили, не рассматриваем. Я про вариант модулей с вынесенными в них телами обработчиков в виде функций.
|