Задача
В некоторых случаях общее состояние - это плохо. Я сейчас нахожусь в проекте, где почти все методы выполняют какое-то изменение состояния. Я считаю, что это проблема. С одной стороны, я не могу повторно использовать методы, потому что в зависимости от текущего состояния системы новое состояние системы после вызова метода будет другим. С другой стороны, тестирование в этом проекте довольно сложно или почти невозможно.
Вопрос
Поэтому мне было интересно, какие существуют методы для предотвращения общего состояния или рефакторинга такого приложения, чтобы было меньше взаимозависимостей.
Одним из способов было бы программирование более функциональным способом программирования. Какие еще лучшие практики существуют и в каких ситуациях они наиболее подходят?
Примеры кода были бы очень признательны, если бы они помогли объяснить методику.
* * Пример тысячи двадцать-одина * +1022 *
Bad
ModuleA
Public Sub DoSomething
Range("A2").Value = Worksheets("Sheet2").Range(cellReference).Value + 10
End Sub
ModuleB
Global cellReference = "B22"
Лучше (потому что нет ссылки на глобальную переменную и нет жестко закодированных листов и ссылок на ячейки)
ModuleA
Public Sub DoSomething(resultCell, sourceSheet, sourceCell)
Range(resultCell).Value = Worksheets(sourceSheet).Range(sourceCell).Value + 10
End Sub
ModuleB
deleted
Объяснение
Итак, я полагаю, что здесь применены следующие методы:
- Удалить жестко запрограммированные значения и передать их в качестве параметров
- Удалить ссылки на глобальные переменные и передать их в качестве параметров
Я знаю, что это основные рекомендации, которым нужно следовать в любом случае. Но, возможно, есть какие-то конкретно помогающие предотвратить общее состояние. Я думаю, Эрик Мейер сказал, что если вы поделились состоянием, то, как правило, что-то не так (я не уверен, правильно ли я его цитировал).
Окружающая среда
Кстати, это проект Excel VBA с тоннами устаревшего кода, разработанного людьми, не имеющими опыта разработки программного обеспечения. Ответы не должны быть направлены на эту конкретную настройку, хотя.