Как быстро разобраться в незнакомом Rails приложении
Это перевод статьи Finding Your Way Around a New Rails Project от Джастина Уэйсc. Джастин веб-разработчик, автор нескольких Ruby-гемов и автор книги Practicing Rails. Перевод выполнен Алексеем Ходос с согласия и одобрения автора оригинала специально для mkdev.
Представь, что ты сменил команду или приступил к новому проекту на новом месте работы. Или же нашёл баг в любимом open-source проекте и задумал отправить свой первый пулл-реквест. И сразу же потерялся, глядя на app/models
после выполнения git clone
. Бывает непросто понять код, даже несмотря на то, что структура Rails та же самая, которую ты обычно используешь. Как же быстрее всего начать работать с незнакомым приложением?
Создаём словарь
Что такое Player
, что такое Session
? Как насчет выбора между Account
, User
и Provider
?
В каждом приложении могут быть свои термины и определения. И, не понимая словаря, которое используется в приложении, ты будешь терять время, разглядывая app/models
каждый раз, когда натыкаешься на новый класс. Или, что ещё хуже, будешь делать неверные предположения о том, как работает та или иная фича.
Итак, первым делом правильнее всего создать словарь. Узнать, из чего сделано данное приложение. Если хочешь сделать это быстро, то изучи файл db/schema.rb
. Ты узнаешь о терминах, используемых в приложении, а также познакомишься со структурой данных. Уделив внимание столбцам *_id
, ты поймёшь, как модели связаны между собой.
Если ты предпочитаешь наглядность, то можно использовать гем rails-erd. На основании моделей он создаст диаграмму, отображающую столбцы, таблицы и их взаимодействие. Если положить распечатку на стол, то , поглядывая в него, будет намного легче разбираться с остальной частью приложения.
Продолжаем с моделями и простыми объектами Ruby
В хорошо спроектированном Rails приложении ты не найдёшь всей информации в файле схемы. Продолжая создавать свой словарь, просмотри app/models
на наличие дополнительных классов и атрибутов, которые отсутствуют в db/schema.rb
.
Но не задерживайтесь на этом этапе. Тут легко потеряться, выясняя как все это работает. Мы здесь сейчас только для составления словаря.
Начиная понимать из чего состоят части приложения, ты начнёшь задаваться вопросом о назначении определенных объектов, или почему они связаны именно таким образом. Сейчас мы разберем этот момент.
Запускаем приложение, и выясняем «Почему»
Хорошо изучив объекты, которое использует приложение, запусти его. Потыкай в разные места, хорошенько исследуй. Если есть документация, то она может помочь. Как бы то ни было, тв вживую увидишь всё, о чём только что узнал.
Работая с приложением, ты начнёшь его осваивать с верхнего уровня. Поймёшь причины, по которым модели связаны именно таким образом. Для чего они сгруппированы. Почему были выбраны именно эти названия классов. Может быть они отображаются на страницах совместно, а может располагаются на своих собственных формах.
И когда ты начнёшь понимать из чего состоят части приложения и для чего они существуют, ты будешь готовы понять, как это все работает.
Выясняем «Как»
К этому моменту ты уже достаточно знаешь о приложении, чтобы углубиться в его детальное исследование. Тебя не должны смутить новые термины и новые взаимодействия внутри его. Ты можете выбрать что-то одно, что тебя интересует, и всё про это разузнать.
С этого момента у тебя есть множество путей на выбор. Вот мои любимые:
- Изучи пользовательский интерфейс программы и подумай: как эта функциональность могла быть реализована, основываясь на имеющихся у тебя знаниях о компонентах программы? Сможешь догадаться сам? Используй отладчик, чтобы подтвердить свою догадку, или узнать как это работает на самом деле.
- Выбери тест-кейс и пройдись с ним по всему приложению. Ну или можно пройдись по коду, или же изучить с помощью отладчика.
- Выбери маршрут или действие контроллера. Теперь разберись, как вызвать это действие из пользовательского интерфейса?
Сейчас также подходящее время, чтобы вернуться к моделям и простым Ruby объектам. Теперь ты можешь копнуть глубже и посмотреть как работают модели.
Покопайся в приложении. Найди пробелы в своих знаниях и заполни их, используя отладчик и имеющийся код.
Почему бы не начать с тестов?
Я часто слышал фразу «Если хотите понять программу, начните с тестов! Это документация в исполняемом виде!»
Но для меня это никогда не работало. Тест-кейсы слишком узконаправлены, слишком детализированы. Если я беру информацию о приложении из тестов, то мне кажется, что я пропускаю что-то более глобальное.
Для того, чтобы понять большое приложение на Rails, или даже большинство гемов, я всегда сначала провожу общий обзор. Я должен знать, из каких компонентов состоит программа и для чего они созданы.
Но, вне всякого сомнения, необходимо запустить тесты. Если они проходят с ошибками, то вы работаете со сломанной программой. И ты не можешь полагаться на информацию, полученную от такой системы.
Из чего, зачем и как
Чтобы понять незнакомое Rails приложение, выполни три шага в следующем порядке:
- Из чего и каких частей состоит программа?
- Зачем они созданы? Почему они связаны вместе именно таким образом?
- Как работает каждая часть в отдельности?
Это позволит взглянуть на программу как в общем виде, так и в разрезе компонентов, что необходимо для понимания программы и успешной работы с ней.