Рефакторинг для отделения бизнес-логики от кода
Я унаследовал проект asp.net и обнаружил, что код на страницах содержит много бизнес-логики.
Я решил, что в большинстве случаев лучше оставить рабочий код на месте, чем пытаться провести масштабный рефакторинг. Однако есть страницы, которые выполняют функции, которые можно повторно использовать в утилитах командной строки для пакетной обработки. Я хотел бы сосредоточить свои усилия на этих страницах, рефакторинг бизнес-логики и ссылки на это в других утилитах.
В настоящее время я ищу рефакторинг этой конкретной страницы, которая содержит 6200 строк кода. Я обнаружил, что это очень утомительная работа, пытаясь найти зависимости между кодом позади и объектами, специфичными для страницы.
Мне интересно, знает ли кто-нибудь инструмент, функцию VS или метод, который позволил бы мне систематически обнаруживать и атаковать эти зависимости? Что-то, что позволит мне идентифицировать любую область кода, которая ссылается на ViewState, текстовое поле, панель, раскрывающийся список и т. Д., Так что я могу переместить эти ссылки на параметры метода и в конечном итоге переместить эту функциональность из класса страницы.
3 ответа
Я бы начал с изучения любого метода, который не следует принципу единой ответственности, и разбил бы их так, чтобы они соответствовали. Как только это будет сделано, вы должны иметь представление о том, что делает код, и у вас должна быть возможность более легко группировать код и перемещать его в выделенные классы для тех групп, которые создают необходимые объекты для использования в процессе работы. Я считаю, что ReSharper - очень полезный инструмент, помогающий делать все это. В конечном итоге вам всегда нужно будет иметь полное представление об основах кода, прежде чем вы сможете успешно выполнить рефакторинг.
Мы все были там в какой-то момент, и у вас есть мое глубокое сочувствие, но ваша готовность сделать это вообще означает, что вы уже движетесь в правильном направлении. Удачи!
Вау, в первую очередь, жаль, что здесь. Любой, кто поместит 6000 строк кода в код, заслуживает того, чтобы его ударили:)
Теперь я уже делал такой рефакторинг раньше. Я хотел бы подойти к этому в несколько шагов:
(1) Создать логические области #Region и #EndRegion Like - Сохранить методы, методы загрузки или (2) Посмотрите, можете ли вы создавать физические бизнес-объекты на основе этих регионов на вашем бизнес-уровне (3) Как только вы закончите, просто отошлите весь свой код в соответствующий класс.
Я понимаю, что вы хотите какой-то инструмент, чтобы все это исчезло, но я боюсь, что, сделав это, вы выкопаете яму. Понимание кода и перемещение его по методу даст вам лучшее понимание.
Один из способов, который я могу сразу подумать, - это затем скомпилировать в сборки и проанализировать сборку с помощью NDepend.