Что такое рефакторинг в java
Перейти к содержимому

Что такое рефакторинг в java

  • автор:

Refactoring in Java

Quote from Robert C. Martin in the Book Clean Architecture: A Craftsman’s Guide to Software Structure and Design.

OO is the ability, through the use of polymorphism, to gain absolute control over every source code dependency in the system. It allows the architect to create a plugin architecture, in which modules that contain high-level policies are independent of modules that contain low-level details.

OO’s nature

encapsulation: put the boundary around the cohesive data and function, only expose the minimum interface to outside. By using this way, a better protection and lower maintenance to the program itself.

inheritance: provide a convenient way to redeclare the data and function to the derivatives.

polymorphism: provide a safe and convenient way to let the concrete derivatives be defined at runtime. (actually it’s implemented by different function tables can be loaded on the flight, and the pointer can call the diffrent version of method )

OO Design Principle

  • Single Responsibility Principle
    • A module should have one and only one reason to change.
    • move common method out
    • partition the system into component in a hierarchy, protect the higher level component from the changes of lower level
    • write an interface/abstract class and implement/extend class from there, this way can avoid keep modifying a class, after we have tested a class, we should try to extend rather than modify that.

    Liskov substitution: object can be replaced by subtype, still correct

    Interface segregation: small specific interface better than single generic one.

    • avoid using new keyword in method,make the test easier

    Data Flow of Application

    controller — (request) -> service — (other service initiatives) -> Repo method — (get response ) -> service — (post processor, response convertion) -> controller

    Data flow is like the map of architecture, using this map we can decide where should we put the logic in and where can we get/reuse the same data. Here’s some use case in my day to day work:

    when we found two unrelated logic block putting in same class, it’s the smell that we need to check data flow upward, and create another peer class and call it overthere.

    before we initiate a new resource, check data flow upward to see any existing data we can reuse.

    Как устранить дубли кода в Java?

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

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

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

    Анализ кода — это один из этапов написания хорошего кода. Анализ кода включает в себя обзор и оценку программы, чтобы выявить области с ошибками, багами, уязвимостями безопасности и другие проблемы.

    • Анализ кода вручную. Это анализ кода строка за строкой, выполняемый разработчиком ПО, который специализируется на анализе кода. Процесс обычно занимает много времени;
    • Автоматизированный статический анализ. Процесс включает в себя использование автоматизированных инструментов, например SonarQube, который сэкономит ваше время. Инструменты проводят анализ кода, без его выполнения.
    • Автоматизированный динамический анализ. Он включает в себя мониторинг выполняемого кода для выявления ошибок, багов и потенциальных уязвимостей.
    • Гибридный подход. Этот метод сочетает в себе автоматизированный статический и динамический анализ кода и его проверку вручную.

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

    По результатам анализа, вы можете провести рефакторинг для исходного кода.

    Рефакторинг — это изменение внутренней структуры Java-кода без изменения его функциональности. Этот процесс имеет множество преимуществ, которые помогают разработчику Java улучшить качество своего кода. Мы приведем четыре причины:

    • Чистый код, рефакторинг помогает устранить запахи кода и извлечь дублирующиеся фрагменты.
    • Обнаружение и исправление ошибок. Рефакторинг делает код легче для понимания, что облегчает поиск ошибок в нем.
    • Простота обслуживания. Проведение регулярного рефакторинга упрощает обслуживание кода.

    Экономия времени и энергии, рефакторинг Java-кода улучшает качество кода без необходимости его переписывать. Это позволит сэкономить ваши ресурсы.

    Например, есть метод, который сравнивает два числа и возвращает true, если первое больше, и false в противном случае:

    Получается достаточно объемный код. Казалось бы, нет необходимости в блоке if-else, когда можно написать метод на 6 строк короче:

    Так код выглядит намного легче, хотя делает тоже действие, что и выше.

    Проведение анализа вручную — утомительная задача, которая отнимает время и ресурсы. Кроме того, это может привести к появлению дополнительных ошибок в ПО. Вот почему нужен автоматический инструмент, который поможет в обеспечении скорости и улучшение вашей работы. Рассмотрим AppRefactoring — инструмент автоматизированного анализа, который эффективно помогает работать с Java-кодом.

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

    Рефакторинг — это инструмент, который необходим каждому Java-разработчику, поскольку ни один код не является совершенным. Регулярно рефакторя свой код, вы получаете возможность поддерживать его читаемость и чистоту, а также функционирование на самом высоком уровне. Анализ кода, необходим чтобы исправить его ошибки и баги. Для анализа лучше всего применить специальные инструменты, о которых говорилось выше. SonarQube, который может провести автоматизированный анализ для кода. AppRefactoring — который не просто поможет провести анализ, но и поможет сделать ваш код уникальным. С такими инстурментами, вам не придется беспокоиться о долгих часах, необходимых для ручного работы с кодом. AppRefactoring поможет вам быстро проанализировать код, предусмотрев все возможные исключения.

    Раздел «Refactor» в IDEA

    Эту статью можно рассматривать как краткий обзор c gif-ками по рефакторингам Java-файлов в IDEA для начинающих.

    Осторожно, много тяжелых gif-картинок.

    «Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” —M. Fowler (1999)

    Содержание

    Введение

    Цель данной статьи — показать доступные способы рефакторинга для Java-файлов (многие способы будут работать и для других языков). Как использовать эти приемы в реальной жизни показано в замечательном видео Тагира Валеева (ссылка в списке источников).

    Думаю, каждый, кто работает в IDEA, знает, что в ней куча способов для рефакторинга кода. И почти уверен, что каждый второй смотрит анонсы новой версии, где красиво показаны новые способы рефакторинга и заглядывал в раздел Refaсtor:

     Рис. 1. Раздел Refactoring IDEA

    Рис. 1. Раздел Refactoring IDEA

    Но не уверен, что все точно знают что и как делают все элементы этого списка, хотя они все детально описаны в справки к idea

    В статье представлены фрагменты кода, порядок действий и анимации почти для каждого пункта. Также постарался добавить, где возможно, ссылку на замечательную книгу Refactoring: Improving the Design of Existing Code (Martin Fowler). Чтобы не сильно раздувать трафик пришлось довольно сильно обрезать много gif-картинок, поэтому обязательно смотрите использованный код под катом. Горячие клавиши приведены для Windows/LInux по умолчанию.

    Раздел «Refaсtor»

    Пойдем сверху вниз по порядку.

    Пункт «Refactor This» (Ctrl+Alt+Shift+T)

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

    Рис. 2. «Refactor This» для имени функцииРис. 2. «Refactor This» для имени функции Рис. 3. «Refactor This» для аргументов функцииРис. 3. «Refactor This» для аргументов функции

    Пункт «Rename» (Shift+F6)

    Позволяет переименовать практически любой идентификатор в коде, будь то переменная или названия класса. Изменения распространяются по всему проекту, в некоторых случаях, включая и комментарии. (У Фаулера переименованию посвящено 2 главы — “Rename Field” и “Rename Variable”)

    Java Professional

    Вы действительно хотите открыть доступ к тестированию по курсу Java Professional на 40 дней?

    ВИДЕОУРОК №5. Рефакторинг. Типичные архитектурные решения и антипаттерны

    В первом уроке вас ждет обзор технологии Java. Будут рассмотрены преимущества и недостатки Java в сравнении с конкурирующими технологиями. Также мы рассмотрим структуру простого Java-приложения, сделаем компиляцию и запуск Java-приложения. В завершении первого урока вас ждет знакомство со средой разработки IDE Netbeans.

    В этом уроке будут рассмотрены такие понятия, как абстракция, инкапсуляция, пакетирование, классы, атрибуты, методы, конструкторы, пакеты. Вы получите ответы на вопросы, связанные с использованием модификаторов доступа (private и public). Узнаете о вызове методов объекта класса в Java. Также будут даны рекомендации по документированию программ.

    В этом уроке мы рассмотрим основные принципы ООП: инкапсуляция, наследование, полиморфизм, поговорим о перегрузка и переопределении методов, использовании модификаторов доступа protected и default (package-friendly), конструкторов, создании нескольких конструкторов класса, процесс создания и инициализации объекта. Также вас ждет знакомство с UML, будет рассмотрено использование EasyUML для Netbeans, кодогенерация на основе диаграммы классов и обратный инжиниринг.

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

    Здесь мы коснемся очень важного понятия – понятия о рефакторинге – итеративном улучшении кода, приведении его в соответствие со стандартами, политиками и рекомендациями, изменении его внутренней архитектуры, не затрагивающем его внешнего поведения. Естественно мы также поговорим о том, чем в деле рефакторинга нам может помочь наша любимая среда разработки. А под конец урока мы вновь обсудим понятие паттерна проектирования, вспомним существующие паттерны и антипаттерны, назовем некоторые типичные ошибки начинающих разработчиков.

    Здесь мы поговорим об ошибках и исключительных ситуациях, от которых не застрахован ни один разработчик, и ни одно приложение, обсудим средства для их обработки, коснемся понятия оценки выражений, а также поговорим о средствам отладки и профилирования кода, которые предлагает IDE Netbeans. Второй важный момент, который мы обсудим – это понятие о тестировании ПО, Unit-тестирование, возможности по организации unit-тестирования и средства тестирования, которые предлагает наша любимая среда разработки.

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

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

    Этот урок является продолжением предыдущего, в котором мы говорили об основах ввода-вывода. Теперь же мы поговорим о более «приземленных» вещах – консольном вводе-выводе, работе с файлами, библиотеках для построения удобного текстового интерфейса пользователя. Стоит также провести аналогию между частью материала этого урока и следующими двумя уроками, в которых мы также будем говорим о построении пользовательского интерфейса, только теперь уже графическими средствами.

    Этот урок является первым в серии уроков, посвященных разработке графических "настольных" приложений. В нем мы поговорим о JFC и Swing, обсудим имеющийся набор интерфейсных элементов и использование различных менеджеров разметки, а также сравним программный и визуальный способы построения графического интерфейса пользователя –средствами Matisse – одного из лучших (если не лучшего) из существующих на рынке конструкторов пользовательского интерфейса для Java. Стоит также отметить, что материал этого урока напрямую связан со уроками 11 и 14, в которых мы поговорим об обработке событий от интерфейсных элементов и о построении приложений на платформе Netbeans

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *