[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