1

В настоящее время я работаю над рефакторингом устаревшего приложения, которое производит документы и таблицы с результатами многочисленных вычислений. Это было первоначально написано в длинных сценариях, не обращая внимания на переменную область, поэтому переменные могли (и были) ссылаться по мере необходимости (несмотря на то, что они были на 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) может указывать меня в направлении ресурсов, которые обсуждают эти проблемы и подходы, которые люди могут принять?

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

Любая помощь была бы принята с благодарностью!

+0

Вам понадобится хорошая система контроля версий, чтобы вы всегда могли вернуться к более ранней, рабочей версии вашей перезаписи. Вам также понадобится хороший набор тестов, чтобы вы знали, когда вам нужно вернуться. – rossum

ответ

0

Я рекомендую «Эффективно работать с устаревшим кодом» Майкла Перса. https://www.goodreads.com/book/show/44919.Working_Effectively_with_Legacy_Code.

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

Смежные вопросы