Узнайте, как содержать его в чистоте

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

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

Самая распространенная ошибка

Давайте взглянем на этот короткий пример проекта с архитектурой MVC:

Кажется, все улажено. Все виды находятся в одной папке, все контроллеры вместе внутри папки /Controllers, а модели сгруппированы в папке /Models. С проектом такого размера, когда у вас есть 3-5 экранов, это может сработать. Но давайте будем реалистами и представим, что мы работаем над проектом с более чем 20 экранами и не менее чем с 20 контроллерами представлений. Будет огромный бардак. Вы не можете просто помещать файлы в одну и ту же папку только потому, что у них есть что-то общее, например. унаследованы от того же класса. Потому что в этом случае вы получите папки с более чем 30 файлами внутри, и найти что-то внутри таких папок очень сложно.

Признак хорошо структурированного проекта

Ваш проект хорошо структурирован, если кто-то, кто не знаком с ним, чувствует себя с ним комфортно.

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

Лучшая практика

При группировании файлов и папок следует придерживаться следующего правила:

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

Что это значит? Позволь мне объяснить. Допустим, у вас есть простой модуль MVVM, который содержит контроллер представления, представление, модель представления и некоторые дополнительные подпредставления. Все эти файлы должны быть помещены в одну папку. Это потому, что все они связаны друг с другом, потому что все они являются частями одного модуля.

В проекте на скриншоте слева все модели видов находятся в одной папке, все виды вместе, и одинаковы для всех моделей. Мы обсуждали это раньше, это не лучшее решение. Теперь взгляните на скриншот справа. Он выглядит более структурированным. У нас есть папка для каждого модуля, который у нас есть, эти папки содержат контроллер представления, модель представления и модель для конкретного модуля. Затем все модули группируются внутри папки /Modules. При такой организации мы знаем, что все модули находятся в папке /Modules, а все файлы, относящиеся к конкретному модулю, находятся в папке с именем модуля, например /SomeModule.

Теперь мы знаем, как группировать модули. Но есть еще несколько вещей, которые мы можем иметь в проекте. Это сервисы, настраиваемые повторно используемые представления, расширения и ресурсы (цвета, шрифты, строки, URL-адреса и т. д.).

Многоразовые представления

У нас может быть 2 типа многоразовых представлений. Представления, которые мы собираемся использовать в приложении, например. кнопки и текстовые поля. И представления, которые используются только в одном конкретном модуле, например, вы решили создать отдельное представление заголовка для одного из ваших модулей.

В первом случае все эти представления должны находиться в одной папке, например. /UIComponents. И внутри этой папки вы можете сгруппировать их в зависимости от их суперклассов, например. /Buttons и /Textfields.

А представления, относящиеся к конкретному модулю, должны быть размещены внутри папки модуля в отдельной папке для компонентов пользовательского интерфейса, например. /Subviews или /Components.

Услуги

Это довольно просто, когда дело доходит до услуг. Вы помещаете все службы в какую-то папку /Services или /Managers. А внутри папки корневой службы вы создаете новую папку для каждой имеющейся у вас службы. Вы создаете папку для каждой службы, так как с вашей службой может быть связано еще несколько файлов. Представьте, что вы работаете над APIService. Вам нужен файл для его протокола, для списка конечных точек, для DTO (объектов передачи данных), которые вы извлекаете, и так далее.

Другие файлы

Мне не нравится иметь много папок и файлов в корневом каталоге проекта. Вот почему я предпочитаю помещать все эти файлы в одну папку с именем/Common, когда речь идет о других вещах, таких как ресурсы, расширения, файлы JSON/CSV и т. д. Внутри папки /Common вы создаете другие папки для ваших файлов, например. /Resources, /Extensions, /JsonFiles и так далее.

Такой подход помогает содержать корневой каталог в чистоте.

Заключение

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

Спасибо за ваше время. Надеюсь, вам понравилась эта статья и вы нашли ее полезной. Не стесняйтесь поделиться своим мнением по этой теме в комментариях.

Check out my other articles about iOS Development

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