Я работаю в команде среднего размера и регулярно сталкиваюсь с этими ужасно большими файлами классов. Моя первая тенденция - обращаться к ним с ножом, но обычно это только усугубляет ситуацию и приводит меня в плохое состояние ума.
Например, представьте, что вы только что получили службу Windows для работы. Теперь в этой службе есть ошибка, и вам нужно выяснить, что делает служба, прежде чем вы сможете надеяться на ее исправление. Вы открываете сервис и видите, что кто-то решил использовать один файл для всего. Здесь есть метод Start, метод Stop, таймеры, вся обработка и функциональность. Я говорю тысячи строк кода. Методы под сотнями строк кода встречаются редко.
Теперь, если вы не можете переписать весь класс, и эти классы богов будут продолжать появляться, как лучше всего с ними справиться? С чего начать? Что вы пытаетесь сделать в первую очередь? Как ты справляешься с такими вещами, а не просто хочешь получить все, что нужно?
Если у вас есть какая-то стратегия, позволяющая просто сдерживать свой характер, это тоже приветствуется.
Советы на данный момент:
- Установить тестовое покрытие
- Код раскладной
- Реорганизация существующих методов
- Поведение документа при обнаружении
- Цель для постепенного улучшения
Edit:
Чарльз Конвей рекомендует подкаст, который оказался очень полезным. ссылка
Michael Feathers (парень в подкасте) начинает с предпосылки, что слишком боялись просто вывести проект из-под контроля исходного кода и просто поиграть с ним напрямую, а затем выбросить изменения. Я могу сказать, что я виновен в этом.
По сути, он сказал, чтобы взять предмет, о котором вы хотите узнать больше, и просто начать его разбирать. Откройте для себя его зависимости, а затем разбейте их. Следуйте за ним везде, куда бы он ни шел.
Отличный совет
Возьмите большой класс, который используется в другом месте, и пусть он реализует интерфейс emtpy. Затем возьмите код, используя класс, и пусть он создает экземпляр интерфейса. Это даст вам полный список всех зависимостей этого большого класса в вашем коде.