Как вы рефакторинг класса Бог?
кто-нибудь знает лучший способ рефакторинга Бог-объект?
Это не так просто, как разбить его на несколько меньших классов, потому что есть соединение с высоким методом. Если я вытаскиваю один метод, я обычно заканчиваю тем, что вытаскиваю все другие методы.
2 ответов
Это как Дженга. Вам понадобится терпение и твердая рука, иначе вам придется восстанавливать все с нуля. Что само по себе неплохо - иногда нужно выбросить код.
прочие советы:
- подумайте, прежде чем вытаскивать методы: на каких данных работает этот метод? Какая у него ответственность?
- сначала попробуйте сохранить интерфейс класса god и делегировать вызовы новым извлеченным классам. В класс Бога должен быть чистым фасадом без собственной логики. Тогда вы можете сохранить его для удобства или выбросить и начать использовать только новые классы
- модульные тесты справка: напишите тесты для каждого метода перед его извлечением, чтобы убедиться, что вы не нарушаете функциональность
Я предполагаю, что "объект Бога" означает огромный класс (измеряется в строках кода).
основная идея состоит в том, чтобы извлечь части своих функций в другие классы.
для того, чтобы найти те, которые вы можете искать
поля/параметры, которые часто используются вместе. Они могли бы вместе перейти в новый класс!--1-->
методы (или части методов), которые используют только небольшое подмножество полей в классе, могут перемещаться в класс содержащие только эти поля.
примитивные типы (int, String, boolean). Они часто являются действительно ценными объектами до их появления. Как только они становятся ценностным объектом, они часто привлекают методы.
посмотрите на использование объекта Бога. Существуют ли различные методы, используемые разными клиентами? Они могут входить в отдельные интерфейсы. Эти intefaces, в свою очередь, могут иметь отдельные реализации.
на самом деле делает эти изменения вы должны иметь некоторую инфраструктуру и инструменты в вашей команде:
тесты: есть (возможно, сгенерированный) исчерпывающий набор тестов, которые вы можете часто запускать. Будьте предельно осторожны с изменениями, которые вы делаете без тестов. Я делаю это, но ограничиваю их такими вещами, как метод извлечения, который я могу сделать полностью с помощью одного действия IDE.
контроль версий: вы хотите иметь контроль версий, который позволяет фиксировать каждые 2 минуты, не замедляя вас вниз. SVN не работает. ГИТ знает.
метод Микадо: идея метода Микадо попробовать изменить. Если это сработает. Если не принять к сведению, что ломается, добавьте их в качестве зависимости от изменения, с которого вы начали. Откат изменений. В результирующем графике повторите процесс с узлом, который еще не имеет зависимостей. http://mikadomethod.wordpress.com/book/