# Рефакторинг

### Темы:

* Понимание целей Рефакторинга
* Понимание распространенных Code Smells
* Владение стандартами кодирования и правилами именования
* Владение распространенными техниками рефакторинга: Извлечение метода, Встраивание метода, Замена алгоритма, Расщепление переменной, Переименование метода, Разбиение условного оператора, Замена магического числа символьной константой и других.
* Владение продвинутыми техниками рефакторинга: Замена делегирования наследованием, Создание шаблонного метода, Свёртывание иерархии, Замена конструктора фабричным методом, Введение Null-объекта, Замена наследования делегированием и других.
* Работа со статическими анализаторами кода: StyleCop, Resharper, SonarCube
* Документирование кода с помощью комментариев

### Контрольный вопросы:

* Какая цель Рефакторинга?
* Почему модульные тесты важны при рефакторинге?
* Что для Вас есть Code Smells?
* Что могут показать статические анализаторы кода?
* Нужно ли оставлять в коде комментарии?

### Источники:

* Книга [Refactoring](https://martinfowler.com/books/refactoring.html) by Martin Fowler, with Kent Beck
* Книга [Code Complete](https://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670) by Steve McConnell
* Книга [Working Effectively with Legacy Code](https://www.amazon.com/Working-Effectively-Legacy-Michael-Feathers/dp/0131177052)
* [CodeSmell](https://martinfowler.com/bliki/CodeSmell.html)
* [Соглашения о написании кода на C#](https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/inside-a-program/coding-conventions)
* [Приёмы рефакторинга](https://refactoring.guru/ru/refactoring/techniques)
