У меня есть большая база кода, с которой я работаю, у которой есть такие единицы:
unit myformunit;
interface
type
TMyForm = class(Form)
end;
procedure not_a_method1;
procedure not_a_method2;
var
global1,global2,global3:Integer;
...
Короче говоря, авторы кода не писали методы, они писали глобальные процедуры. Их десятки тысяч. Внутри этих процедур они ссылаются на один экземпляр MyForm:TMyForm
.
Я рассматриваю возможность написания утилиты анализатора/перезаписи, которая превратит этот код в "по крайней мере минимально объектно-ориентированный код". Стратегия состоит в том, чтобы перенести глобалы раздела интерфейса и реализации в форму в начале. Я понимаю, что едва ли элегантный ООП. Но это шаг вперед от глобальных.
Если бы я мог делать это на одной единице за раз, я мог бы восстановить поломку в остальной части проекта, если бы я делал это только по одной форме за раз. Но я бы хотел сократить время, затрачиваемое на переписывание единиц, вместо того, чтобы делать это вручную. В некоторых формах имеется более 500 процедур и более 500 интерфейсов и глобальных переменных реализации, которые на самом деле специфичны для состояния одного экземпляра формы, в которой они находятся в одной и той же единице.
В принципе, что я буду делать, если ничего подобного не существует, напишите парсер, основанный на парсере Castalia Delphi. Я надеюсь, что, возможно, ModelMakerCodeExplorer, или castalia, или какой-либо другой подобный инструмент имеет то, что, по крайней мере, будет частью того, что мне нужно для меня, поэтому мне не нужно самостоятельно создавать эту утилиту. Даже если мне придется строить его самостоятельно, я считаю, что он может автоматизировать для меня от тысячи до двух тысяч часов работы. Я могу хотя бы запустить его, а затем посмотреть, сколько разрывов, а затем вернуться или зафиксировать после того, как я решился на уровень усилий по рефакторингу этого кода.
Альтернативные стратегии, которые достигают одной и той же цели (перейдите от нулевой инкапсуляции и нулевого ООП к более инкапсуляции и немного больше нуля ООП, поэтапно, на большой неструктурированной базе данных delphi, которая использовала только объекты, когда это было неизбежно, и никогда не имели представления о реальном ООП) приветствуются.