Рефакторинг. Ваш способ уменьшить сложность кода большого класса с большими методами

У меня есть класс прежней версии, который довольно сложен для поддержания:

class OldClass {
  method1(arg1, arg2) {
      ... 200 lines of code ... 
  }

  method2(arg1) {
      ... 200 lines of code ... 
  }

  ...

  method20(arg1, arg2, arg3) {
      ... 200 lines of code ... 
  }    
}

Методы огромны, не структурированы, и повторяющимися (разработчик, любимый скопировать/вставить aprroach). Я хочу разделить каждый метод на 3-5 небольших функций с одним pulic методом и несколько помощников.

Что Вы предложили бы? Несколько идей прибывают по моему мнению:

  • Добавьте несколько частных вспомогательных методов для каждого метода и присоединитесь к ним в #region (простой рефакторинг)

  • Используйте Шаблон "команда" (один класс команды на метод OldClass в отдельном файле).

  • Создайте помощника статический класс на метод с одним открытым методом и несколькими частными вспомогательными методами. Методы OldClass делегируют реализацию для адаптации статического класса (очень подобный командам).

  • ?

Заранее спасибо!

8
задан Brett Hardin 29 June 2013 в 17:36
поделиться

5 ответов

SRP - Single Responsibilty principle и DRY - Don't Repeat yourself

3
ответ дан 5 December 2019 в 23:13
поделиться

Смотрите SD CloneDR для инструмента, который может сказать вам, какие блоки кода у каждого из ваших методов являются общими, включая возможные параметризации.

1
ответ дан 5 December 2019 в 23:13
поделиться
  1. Начните с отображения текущей функциональности и создания диаграммы классов UML. Таким образом вы сможете эффективно достичь СУХОЙ.

  2. Измените дизайн, сделав его эффективным и СУХИМ, сохранив при этом интерфейс вашей системы как можно более неизменным.

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

  4. Спросите своего менеджера о модульном тесте, правильно ли вы поняли его функциональность? Не реализуйте никаких новых функций, это вызовет проблемы с существующими системами, использующими код, и если вы правильно сделаете новый дизайн, добавив новые функции

  5. Внедрите одобренную систему.

  6. Используйте значения по умолчанию в качестве аргументов для уменьшения перегрузки: SelectUser (int userId = 0) можно вызвать с помощью SelectUser ();

0
ответ дан 5 December 2019 в 23:13
поделиться

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

1
ответ дан 5 December 2019 в 23:13
поделиться

DRY - Не повторяйтесь.

Первое, что я всегда делаю, это удаляю (все) повторения. Даже одна строчка - это повторение.

Это нормализует код, а также даст вам кучу улучшений, таких как обобщение кода.

0
ответ дан 5 December 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: