У меня есть класс прежней версии, который довольно сложен для поддержания:
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 делегируют реализацию для адаптации статического класса (очень подобный командам).
?
Заранее спасибо!
SRP - Single Responsibilty principle и DRY - Don't Repeat yourself
Смотрите SD CloneDR для инструмента, который может сказать вам, какие блоки кода у каждого из ваших методов являются общими, включая возможные параметризации.
Начните с отображения текущей функциональности и создания диаграммы классов UML. Таким образом вы сможете эффективно достичь СУХОЙ.
Измените дизайн, сделав его эффективным и СУХИМ, сохранив при этом интерфейс вашей системы как можно более неизменным.
Затем вы пишете модульные тесты для новой системы, было бы лучше написать их и для старой системы, но поскольку вы, вероятно, собираетесь изменить имена методов и аргументы, модульные тесты, вероятно, не могут работать в обеих системах.
Спросите своего менеджера о модульном тесте, правильно ли вы поняли его функциональность? Не реализуйте никаких новых функций, это вызовет проблемы с существующими системами, использующими код, и если вы правильно сделаете новый дизайн, добавив новые функции
Внедрите одобренную систему.
Используйте значения по умолчанию в качестве аргументов для уменьшения перегрузки: SelectUser (int userId = 0)
можно вызвать с помощью SelectUser ();
Я бы начал с поиска повторяющихся фрагментов и выделения их в вспомогательные функции. Как только вы сузите кодовую базу таким образом, вы сможете рассмотреть другие способы рефакторинга, и код будет гораздо легче восприниматься.
DRY - Не повторяйтесь.
Первое, что я всегда делаю, это удаляю (все) повторения. Даже одна строчка - это повторение.
Это нормализует код, а также даст вам кучу улучшений, таких как обобщение кода.