Обзор темы [Рефакторинг кода]

Замена кодирования типа классом

(Replace Type Code with Class)

Класс имеет перечислимое кодирование типа, которое не влияет на поведение.

Заменить число новым классом.

 

Во многих С-подобных языках есть такое понятие, как перечисление. Символические имена очень удобны для чтения, но проблема состоит в том, что компилятор работает только с лежащими под именами целыми числами. Это уменьшает понимаемость и служит источником ошибок.

Если заменить эти числа классом, то компилятор будет проводить проверку типов над классом. Предоставляя методы фабрики (factory methods) для класса, получим статическую проверку того, что только корректные экземпляры будут созданы.

Однако, до применения этого рефакторинга надо рассмотреть другие возможности замены кодирования типа (type code). Этот рефакторинг можно применять, только если кодирование типа не используется в операторах выбора. Пока что JAVA, например, может производить выбор только из целых чисел, но не из произвольных классов, так что такая замена приведет к ошибкам. В этом случае надо использовать Замену условия полиморфизмом, а перед этим к кодированию типа надо применить Замену кодирования типа подклассами либо Замену кодирования типа состоянием/стратегией.

Даже если кодирование типа не используется в операторах выбора, надо быть готовым к тому, что придется перенести часть поведения, воспользовавшись Перемещением метода.