Найти в Дзене
JuniorCoder

Рефакторинг кода тестового задания на должность C# разработчика

Добрый день. Некоторое время назад вышла статья с тестовым заданием на должность C# разработчика, которое было решено быстро и были допущены некоторые ошибки в коде, относительно нэйминга и оптимизации. В этой статье я проведу рефакторинг этого кода. Ознакомится со статьёй можно тут, а исходный код можно найти на GitHub.
Во-первых.
Самое первое, что я не учёл при выполнении задания - это проверка
Оглавление

Добрый день. Некоторое время назад вышла статья с тестовым заданием на должность C# разработчика, которое было решено быстро и были допущены некоторые ошибки в коде, относительно нэйминга и оптимизации. В этой статье я проведу рефакторинг этого кода. Ознакомится со статьёй можно тут, а исходный код можно найти на GitHub.

Во-первых.

Самое первое, что я не учёл при выполнении задания - это проверка значения N (1 ≤ N ≤ 1000). Сделаем это в классе Wood.

Создадим две константы: MinCountNodes(=1) и MaxCountNodes(=1000).

Созданные константы.
Созданные константы.

Создадим приватный метод DataIsValidity, цель которого проверка условия (1 ≤ N ≤ 1000).

Реализация метода DataIsValidity.
Реализация метода DataIsValidity.

В данном проекте используется C# 9.0, поэтому данные проект будет корректно работать только ,если TargetPlatform выставлен в net5.0 или net6.0. (На самом деле такая конструкция у меня работала и в netcore3.1 и net framework, просто нужно при создании использовать Microsoft.NET.Sdk, подробнее об этом можно прочитать тут.)

И добавим эту проверку в начало блока try метода CreateWood.

-4

Во-вторых.

-5

В класс Program в методе Main находятся "захардкоженные" переменные (подчеркнуты красным). Меня часто ругали за это, поэтому либо это должно быть константными значениями, либо нужно их получать из какого-либо источника. Я выберу вариант с константой, потому что в задании ничего не сказано о предоставлении выбора файла.

-6
-7

В-третьих.

Логика каждого используемого метода включена в блок try - catch. Каждая ошибка возникающая ошибка выводится на экран консоли через вызываемое событие в классе Logger. Значит в методе Main от этого блока можно избавится.

В-четвертых.

Матрицу соединений можно создать сразу после проверки на валидность. И объявить параллельную задачу можно также после создания матрицы.

Начало изменений в методе.
Начало изменений в методе.

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

Итог.

По итогу всего рефакторинга код стал более читаемым. Удалены лишние фрагменты кода, введены новые константы для повышения понимания работы кода.

Ознакомится с кодом можно всё там же на GitHub, только нужно переключится в ветку refactoring.

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