[Moscow.pm] refactoring

PEF Secure pef-secure на yandex.ru
Чт Окт 15 12:32:39 PDT 2015


On Thursday, October 15, 2015 21:22:38 Vladimir Timofeev wrote:
> В первом письме автор ясно обозначил цель: "Существует ли какой-либо
> сбособ сделать более читаемым такой код?"
> С моей точки зрения читаемость кода, это очень важное свойство в
> подавляющем большинстве проектов.
> И улучшение читаемости - хорошая цель.

Замечательно. Осталось ответить себе на вопросы: так ли уж нечитаем этот код, 
что с ним надо что-то делать? Есть ли с ним системные проблемы? Необходимо ли 
для их решения что-либо делать со структурами данных в ядре программы? Не 
выльется ли это в рефакторинг всего кода ради рефакторинга всего кода? Ну и 
так далее. 

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

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

> 1. Код рендеринга ничем принципиально не отличается от остального
> кода, он так же подвержен изменениям. Более того, скорее та куча
> костылей в коде рендеринга, экспортеров и т.п. которая для вас
> присутствует "по определению", это следствие того, что именно этот код
> меняется наиболее часто. И с моей точки зрения, именно его и нужно
> писать максимально простым и понятным.

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

> 2. Если вы посмотрите на проект автора, то увидите, что там уже два
> практически идентичных модуля с огромным дублированием кода. Уже
> сейчас при небольшом изменении структуры модели, придется вносить
> одинаковые изменения в оба. Тут две проблемы. Одна из них дублирование
> кода, просто придется больше писать, больше тестировать, больше
> читать. Вторая - читаемость, читаемость меньше, больше времени
> потребуется чтоб разобраться в текущем функционале, а потом ещё раз
> разобраться (см. первую проблему).

Меня проект не зацепил, чтобы я там прочитал больше одного модуля. Вопросов о 
том, как избавиться от дублирования кода или как стоит изменить структуры 
данных пока что не ставилось. 
-- 
PEF Developer


Подробная информация о списке рассылки Moscow-pm