Это ускорит ваше развитие

Модульность, или модульная архитектура, относится к практике разделения программного приложения на отдельные автономные модули, которые можно разрабатывать и поддерживать независимо друг от друга. В приложениях для iOS мы можем добиться этого, поместив некоторый код в отдельные пакеты Swift и связав их с вашим проектом с помощью менеджеров зависимостей, таких как Swift Package Manager или CocoaPods.

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

Инкрементная сборка

Если вы с ним не знакомы, взгляните на определение из Википедии:

Модель инкрементной сборки – это метод разработки программного обеспечения, при котором продукт проектируется, внедряется и тестируется поэтапно (каждый раз добавляется немного больше), пока продукт не будет готов.

Когда мы создаем наш проект XCode, все цели, платформы и модули создаются отдельно. Когда мы собираем его в первый раз, это обычно занимает много времени, так как XCode должен собрать ваш проект и все имеющиеся у вас системные и сторонние фреймворки и библиотеки. Но когда вы делаете это позже, это обычно происходит намного быстрее. Это происходит потому, что XCode создает только модули, которые были изменены.

Если у вас есть вся ваша кодовая база внутри одного модуля, XCode должен перекомпилировать весь ваш код каждый раз, когда вы выполняете сборку. На изображении ниже изменения в любой части проекта заставляют XCode заново все перекомпилировать.

Чтобы повысить производительность в этом случае, нам нужно переместить Services, Utilities и UIComponents в отдельные модули и добавить их в качестве зависимостей в приложение.

Разделив приложение на более мелкие модули, объем компиляции уменьшается. Когда вы вносите изменения в конкретный модуль, необходимо перекомпилировать только этот модуль и его зависимости. Это устраняет необходимость перекомпилировать всю кодовую базу, что приводит к более быстрому времени сборки для добавочных изменений.

Повторное использование кода

Поскольку вы можете импортировать свои модули в несколько проектов, модульность позволяет вам повторно использовать ваш код в разных ваших проектах. Давайте посмотрим на приложения Uber. У них есть Uber, Uber Eats, Uber Driver и еще несколько приложений. Если вы когда-либо использовали эти приложения, вы могли заметить, что все они имеют одинаковый стиль пользовательского интерфейса. Исходя из этого, я предполагаю, что у разработчиков Uber есть какой-то модуль UberUI или UberDesignSystem, который используется во всех их приложениях.

Вы можете сделать то же самое в своих приложениях. Благодаря модульности нет необходимости каждый раз создавать сетевой уровень с нуля. Вы можете создать какой-нибудь Network Engine, обернуть его в отдельный модуль и использовать в своих будущих проектах. Такой подход сэкономит вам много времени.

Командное сотрудничество

Если вы когда-либо работали над проектом в команде, вы, вероятно, много раз сталкивались с конфликтами слияния. А худшие конфликты всегда происходят внутри project.pbxproj файла. Кто-то добавил что-то новое, кто-то что-то переименовал, кто-то удалил все файлы, а последний решил реорганизовать некоторые файлы в новые папки. Бывает, когда над одним модулем работает целая команда.

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

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

Другие преимущества

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

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

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

Заключение

Как видите, модульность может многое предложить. Тем не менее, вы должны очень тщательно разбивать свое приложение на модули. Вам нужно подумать о том, какие модули вы хотите создать и какие у них будут зависимости.

Я надеюсь, что вы нашли эту статью полезной, и, возможно, вы попытаетесь использовать модуляризацию в своих новых или текущих проектах. Буду рад увидеть ваше мнение на эту тему в комментариях. Спасибо за ваше время!

Check out my other articles about iOS Development

https://medium.com/@artem.khalilyaev