Поймите форму своей кодовой базы

В моей предыдущей статье я писал о том, как мы можем использовать различные доступные инструменты для удаления неиспользуемых resources, classes, functions и localized strings. Надеюсь, вам понравилось, ребята.

В этой статье я собираюсь рассказать о другом инструменте, который я обычно использую для глубокого анализа своей кодовой базы. Здесь мы говорим о графе зависимостей в нашем проекте. Так что же такое граф зависимостей?

С математической точки зрения граф зависимостей - это« ориентированный граф , в котором направленные ребра соединяют узлы и указывают на направленную зависимость». - Эрик Дитрих

Я хотел бы подробнее поговорить о графике зависимостей, но, возможно, в следующий раз в отдельной статье. Инструмент, который я собираюсь объяснить, я использовал в течение некоторого времени, чтобы получить обзор классов и структур в моем проекте - насколько они велики, как они связаны друг с другом и какие классы зависят от который. Давайте сначала погрузимся в реальное использование, а затем вернемся к объяснению.

Этот инструмент представляет собой Визуализатор зависимостей Objective-C и Swift и использует .o(object) файлы для создания графа зависимостей.

Чтобы использовать этот инструмент: сначала введите следующую команду в свой терминал:

git clone https://github.com/PaulTaykalo/objc-dependency-visualizer.git ;
cd objc-dependency-visualizer ;

Теперь идите и создайте свой проект iOS в Xcode, а затем введите команду:

./generate-objc-dependencies-to-json.rb -w -s "" > origin.js ;

Эта команда, приведенная выше, берет ваш проект из производных данных, которые вы только что создали перед вводом указанной выше команды, а затем подготавливает ориентированный граф ваших классов. Теперь введите:

open index.html

Приведенная выше команда открывает браузер по умолчанию и показывает диаграмму.

Примечание. Это может не работать в Safari, поэтому используйте Chrome или Firefox, чтобы открыть этот index.html файл.

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

Я знаю, что это выглядит расплывчато, но мне пришлось уменьшить масштаб, чтобы показать все классы. Более подробно график представлен ниже:

Итак, все эти оранжевые кружки - это контроллеры представления, коричневые - константы и структуры и так далее.

Нажатие на один кружок выделяет его вместе со всеми другими классами, от которых он зависит, или теми, которые зависят от него, как показано на изображении выше.

Если вы внимательно посмотрите на график зависимостей, вы заметите, что есть некоторые круги далеко от основного кластера - они называются островами. Это отдельные фрагменты кода, которые не зависят от основной кодовой базы и могут / не могут служить целям проекта.

Острова не обязательно плохие, но из представления графа зависимостей мы можем видеть, что мы, несомненно, можем удалить весь остров, поскольку это бесполезно.

Таким образом, суть всего этого заключается в использовании средства просмотра графа зависимостей, мы можем видеть распределение кодовой базы в нашем проекте. Он дает анализ кодовой базы «на лету». Это также помогает нам увидеть циклическую зависимость между классами. Циклическая зависимость образуется, когда две или более абстракций имеют прямые или косвенные зависимости друг от друга.

Заключение

Спасибо за прочтение. Удачного кодирования!