Рефакторинг для отделения бизнес-логики от кода

Я унаследовал проект asp.net и обнаружил, что код на страницах содержит много бизнес-логики.

Я решил, что в большинстве случаев лучше оставить рабочий код на месте, чем пытаться провести масштабный рефакторинг. Однако есть страницы, которые выполняют функции, которые можно повторно использовать в утилитах командной строки для пакетной обработки. Я хотел бы сосредоточить свои усилия на этих страницах, рефакторинг бизнес-логики и ссылки на это в других утилитах.

В настоящее время я ищу рефакторинг этой конкретной страницы, которая содержит 6200 строк кода. Я обнаружил, что это очень утомительная работа, пытаясь найти зависимости между кодом позади и объектами, специфичными для страницы.

Мне интересно, знает ли кто-нибудь инструмент, функцию VS или метод, который позволил бы мне систематически обнаруживать и атаковать эти зависимости? Что-то, что позволит мне идентифицировать любую область кода, которая ссылается на ViewState, текстовое поле, панель, раскрывающийся список и т. Д., Так что я могу переместить эти ссылки на параметры метода и в конечном итоге переместить эту функциональность из класса страницы.

3 ответа

Решение

Я бы начал с изучения любого метода, который не следует принципу единой ответственности, и разбил бы их так, чтобы они соответствовали. Как только это будет сделано, вы должны иметь представление о том, что делает код, и у вас должна быть возможность более легко группировать код и перемещать его в выделенные классы для тех групп, которые создают необходимые объекты для использования в процессе работы. Я считаю, что ReSharper - очень полезный инструмент, помогающий делать все это. В конечном итоге вам всегда нужно будет иметь полное представление об основах кода, прежде чем вы сможете успешно выполнить рефакторинг.

Мы все были там в какой-то момент, и у вас есть мое глубокое сочувствие, но ваша готовность сделать это вообще означает, что вы уже движетесь в правильном направлении. Удачи!

Вау, в первую очередь, жаль, что здесь. Любой, кто поместит 6000 строк кода в код, заслуживает того, чтобы его ударили:)

Теперь я уже делал такой рефакторинг раньше. Я хотел бы подойти к этому в несколько шагов:

(1) Создать логические области #Region и #EndRegion Like - Сохранить методы, методы загрузки или (2) Посмотрите, можете ли вы создавать физические бизнес-объекты на основе этих регионов на вашем бизнес-уровне (3) Как только вы закончите, просто отошлите весь свой код в соответствующий класс.

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

Один из способов, который я могу сразу подумать, - это затем скомпилировать в сборки и проанализировать сборку с помощью NDepend.

http://www.ndepend.com/Features.aspx

http://www.ndepend.com/Res/NDependBig03.PNG

Другие вопросы по тегам