Как рефакторить дублированный в трех классах код?

В Visual Studio у меня есть проект ASP.NET 4.5, язык C#. В этом проекте я нашел три класса (.cs), в которых большинство кодов одинаковы, включая поля и свойства.

В таком случае, каков хороший подход к минимизации и интеграции (рефакторингу) повторяющегося кода?


person Jay    schedule 23.03.2015    source источник
comment
Классы нередко используют общие имена переменных. Но если это одни и те же строки кода, возможно, вам следует изучить базовый класс (если это имеет смысл).   -  person PiousVenom    schedule 23.03.2015
comment
это очевидный вопрос, если вы дублируете код, что означает повторное использование кода, то почему бы не создать собственный класс и получить доступ к функциям из 1 места, а не из 3 разных мест. Вы знакомы с термином рефакторинг кода?   -  person MethodMan    schedule 23.03.2015
comment
Я думал о создании глобального класса для переменных, но я уверен, что есть лучший и профессиональный способ реализации. Я ищу это.   -  person Jay    schedule 23.03.2015
comment
Целостность одних и тех же строк кода в основном означает рефакторинг. Я упомянул рефакторинг, как и @MethodMan, а также @MyCodeSucks, хотя и не напрямую. Пожалуйста, изучите рефакторинг перед любой интеграцией одних и тех же строк кода. Особенно с учетом вашего упоминания о глобальном классе и того факта, что это кодовая база asp.net.   -  person Paul Sasik    schedule 24.03.2015


Ответы (1)


Это рискованный процесс рефакторинга, но:

  • вы можете начать с написания модульных тестов, если у вас их нет.

  • выбрать один из классов в качестве мастера

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

Если у вас есть ReSharper (или другие качественные инструменты рефакторинга), этот процесс пройдет более гладко.

Тем не менее, предостережение... Если у вас не настроены модульные тесты, будет сложно убедиться, что код, который выглядит дублированным, на самом деле им является. Легко пропустить изменения в логике только при визуальном осмотре.

person Paul Sasik    schedule 23.03.2015
comment
Я думал о создании глобального класса для переменных, но я уверен, что есть лучший и профессиональный способ реализации. Я ищу это. - person Jay; 23.03.2015
comment
@Jay Лучший и профессиональный способ заключается в использовании: модульных тестов, чтобы убедиться, что ваш код работает должным образом, инструментов статического анализа кода (выявление повторяющегося кода) и инструментов рефакторинга, таких как Resharper (изменение кода в лучшую сторону). ). И если под глобальным классом вы подразумеваете статический, то вы можете попасть в мир боли на веб-ферме. Пожалуйста, изучите эти идеи: модульное тестирование, статический анализ кода, рефакторинг, лучшие практики, шаблоны. - person Paul Sasik; 24.03.2015
comment
Спасибо за ответ. Я не очень разбираюсь в ASP.net, и я думал о концепции включения в PHP или импорта в CSS. Я думаю, вы знаете много профессиональных вещей, но это пока не мое состояние. Еще раз спасибо. - person Jay; 24.03.2015
comment
@Джей, пожалуйста. Чтобы стать профессионалом, нужно изучать и практиковать идеи, перечисленные в ответах и ​​комментариях. Удачи в карьере! - person Paul Sasik; 25.03.2015