On Thursday, October 15, 2015 21:22:38 Vladimir Timofeev wrote: > В первом письме автор ясно обозначил цель: "Существует ли какой-либо > сбособ сделать более читаемым такой код?" > С моей точки зрения читаемость кода, это очень важное свойство в > подавляющем большинстве проектов. > И улучшение читаемости - хорошая цель.
Замечательно. Осталось ответить себе на вопросы: так ли уж нечитаем этот код, что с ним надо что-то делать? Есть ли с ним системные проблемы? Необходимо ли для их решения что-либо делать со структурами данных в ядре программы? Не выльется ли это в рефакторинг всего кода ради рефакторинга всего кода? Ну и так далее. Код не особо красив, но городить ради неземной красоты этого кода какую то специальную инфраструктуру, считаю, не особо разумно. А простого способа сделать его "красивее" при тех структурах данных так сразу не вижу. Можно сократить и немного разгрузить многочисленные get_*, что я уже предложил. Можно навернуть инфраструктуру для подобных линейных экспортов и весь ужас спрятать туда, но, боюсь, у этого хозяйства будет ровно один пользователь. Собственно, вся суть обсуждаемого кода заключается в том, что берутся подряд данные и складываются в строку. Улучшить тут можно только упрощением или некоторой инфраструктурой, которая нужные данные возвращала бы по списку требуемых полей. Т.е. иметь список полей и способов их извлечения. После подобного описания, останется найти второго пользователя для инфраструктуры, а то обидно, все алгоритмы изнутри цикла модуля просто переместятся в другое место. > 1. Код рендеринга ничем принципиально не отличается от остального > кода, он так же подвержен изменениям. Более того, скорее та куча > костылей в коде рендеринга, экспортеров и т.п. которая для вас > присутствует "по определению", это следствие того, что именно этот код > меняется наиболее часто. И с моей точки зрения, именно его и нужно > писать максимально простым и понятным. Сомнительно, что в _этом_ коде может меняться что-то, кроме добавления дополнительных полей в таблицу икселя. Вообще, код в проекте всегда имеет какие то различия. Типа: "тут ядро системы", "тут утилиты", "тут плагины, которые могут быть никому не нужны". Так что код рендеринга _может_ принципиально отличаться от остального кода системы. Я не берусь судить как оно в этом проекте, не разбирал его. > 2. Если вы посмотрите на проект автора, то увидите, что там уже два > практически идентичных модуля с огромным дублированием кода. Уже > сейчас при небольшом изменении структуры модели, придется вносить > одинаковые изменения в оба. Тут две проблемы. Одна из них дублирование > кода, просто придется больше писать, больше тестировать, больше > читать. Вторая - читаемость, читаемость меньше, больше времени > потребуется чтоб разобраться в текущем функционале, а потом ещё раз > разобраться (см. первую проблему). Меня проект не зацепил, чтобы я там прочитал больше одного модуля. Вопросов о том, как избавиться от дублирования кода или как стоит изменить структуры данных пока что не ставилось. -- PEF Developer -- Moscow.pm mailing list [email protected] | http://moscow.pm.org
