В настоящее время я работаю над рефакторингом устаревшего приложения, которое производит документы и таблицы с результатами многочисленных вычислений. Это было первоначально написано в длинных сценариях, не обращая внимания на переменную область, поэтому переменные могли (и были) ссылаться по мере необходимости (несмотря на то, что они были на C#). Есть пара сотен переменных, которые имеют конкретные вычисления с использованием ранее рассчитанных переменных.Рефакторинг сотен глобальных переменных во взаимосвязанных вычислениях с ООП
Чтобы дать иллюстрацию того, что я имею в виду ...
В одной части кода у вас есть что-то вроде этого:
a1a[0] = 0.318 * apples[0];
a1a[1] = 0.312 * apples[1];
a1a[2] = // and so on...
Тогда, в какой-то другой части кода:
for (i = 0; i < 50; i++)
{
a1b[i] = total_a * some_other_variable_calculated_somewhere[i];
a1c[i] = total_a * yet_another[i];
// and probably some more in this block...
}
Наконец, позже:
for (i = 0; i < 50; i++)
{
b1[i] = a1a[i] + a1b[i];
something_else[i] = b1[i] + a1c[i];
c2[i] = c1[i] + c1b[i];
// and some others...
}
Это всего лишь часть рефакторинга, и в то время как другие части ушли хорошо, с ними я в основном просто извлекал вычисления в разные классы и более мелкие методы, с каким-то взломанным подходом к обмену данными между они включают много обертывания и разворачивания, делая его еще более подробным и, возможно, более утомительным для редактирования.
Actual Вопрос:
Это мой первый раз работает над этим видом проекта, и я довольно новыми для моей карьеры в целом, так что мне интересно, если кто-нибудь
а) имеет советы о том, как взять длинные линейные скрипты взаимосвязанных вычислений с тем, что является по существу глобальными переменными и помещать их в объектно-ориентированную конструкцию, и/или
b) может указывать меня в направлении ресурсов, которые обсуждают эти проблемы и подходы, которые люди могут принять?
У меня не сложилось впечатление, что это уникально, но я действительно изо всех сил пытаюсь найти ресурсы на нем. Я даже не уверен, насколько я смогу обратиться к этому проекту, но я думаю, что знание того, как справиться с этими проблемами, будет очень полезно, когда я есть.
Любая помощь была бы принята с благодарностью!
Вам понадобится хорошая система контроля версий, чтобы вы всегда могли вернуться к более ранней, рабочей версии вашей перезаписи. Вам также понадобится хороший набор тестов, чтобы вы знали, когда вам нужно вернуться. – rossum