EN
iOS Такой
iOS Такой
61 subscribers
goals
18 of 100 paid subscribers
Когда наберу первые 100 подписчиков, я буду безумно рад! Здесь мы кодим, проводим собеседования, доклады. Присоединяйся!

Учимся декомпозировать задачи

Всем привет! Декомпозиция - это один из главных и важнейших навыков, которыми должны обладать разработчики. Как минимум, среднего уровня.

Декомпозиция — разделение большого и сложного на небольшие простые части. При постановке задач декомпозировать — значит разбить большую задачу на маленькие задачи, которые можно легко оценить.

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

Пропустим все моменты с ознакомлением документации, технических требований и т.п. К нам пришла фича, сделать новый экран, например уведомления. Для себя я её разобью так:

1. Начну с сетевого слоя. Напишу Endpoint, пропишу сервис, менеджер и тд.
2. Перед тем, как начну верстать UI, нужно убедиться нет ли таких элементов, которых у вас нет в проекте. Я думаю что у многих есть ДС или кастомные UI-элементы. Сверстаю экран.
3. Подключу сервис к экрану, проверка выполнение запросов.
4. Написание бизнес логики, архитектурных моментов. 
5. Проверка функционала.

Или давайте еще разберем пример на основе данного экрана.
Я начну с ендпоинта для данного экрана. Так как в документации мне говорят, что ячейки у нас будут тапаться и открываться детальная страница, то будет и post запрос.

Окей, мы написали ендпоинт для модуля. Далее нам нужно будет использовать наш ендпоинт в менеджере, чтобы в последующем реализовать сетевой запрос на сервер. Так же нам нужно создать модель данных, куда будет сохраняться ответ. 
2. Приступлю к верстке, изучив экран я понимаю, что тут одна переиспользуемая ячейка. Начну с неё. 
3. Хорошо, ячейка готова. Теперь нам необходимо сверстать экран со списком этих ячеек.
4. После предварительной вертски, нам нужно написать некую бизнес логику. Работу с данными, необходимо реализовать запрос получения данного API и его сохранения, чтобы в последующем в нашем UI, мы смогли взять реальные данные и проверить экран.
5. Результат:

Давайте для большего понимания, разберем еще пример.
Представим, что мы разрабатываем приложение для заказа еды. 
1. Общий функционал:
Вход/регистрация пользователя:
    *  Авторизация через социальные сети
    *  Ввод email и пароля
    *  Восстановление пароля
Поиск и выбор ресторана:
    *  Фильтры по типу кухни, району, рейтингу
    *  Список ресторанов с меню
    *  Карта с метками ресторанов
Оформление заказа:
    *  Выбор блюд и добавление в корзину
    *  Ввод адреса доставки
    *  Выбор способа оплаты
    *  Отслеживание статуса заказа
Профиль пользователя:
    *  История заказов
    *  Изменение личных данных
    *  Настройки приложения
2. Декомпозиция функционала на модули:
Модуль "Авторизация":  
    * Отвечает за все действия, связанные с входом и регистрацией пользователей.
Модуль "Рестораны":
    *  Отображает список ресторанов, реализует поиск и фильтрацию, работу с картой.
Модуль "Корзина":
    *  Отображает выбранные пользователем блюда, позволяет изменять количество и удалять блюда.
Модуль "Оплата":
    *  Обрабатывает платежные операции, интегрируется с платежными системами.
Модуль "Профиль":
    *  Сохраняет и отображает информацию о пользователе, обрабатывает изменения настроек.
3.  Декомпозиция модуля "Рестораны" на компоненты:
Компонент "Список ресторанов":
    *  Отображает список ресторанов с кратким описанием.
Компонент "Фильтр":
    *  Позволяет пользователю фильтровать список ресторанов по выбранным критериям.
Компонент "Карта":
    *  Отображает рестораны на карте, позволяет переходить к подробной информации о ресторане.
4. Декомпозиция компонента "Список ресторанов" на функции:
Функция "Получить список ресторанов":
    *  Получает данные о ресторанах из API.
Функция "Отобразить ресторан":
    *  Отображает информацию о ресторане в виде карточки.
Функция "Обновить список ресторанов":
    *  Обновляет список ресторанов после изменения фильтра или других действий пользователя.
И уже собственно экраны мы тоже можем декомпозировать, так как все зависит от cложности UI. Возможно нужно будет создать кастомный элемент или что-то подобное.
Заключение:
Декомпозиция задач —  это фундаментальная вещь для разработчика, которая позволяет облегчить и структурировать ваш подход к разработке.  

Subscription levels

Поддержка iOS Такой

$ 1,06 per month
- Доступ к закрытому чату
- Еженедельные созвоны с подписчиками, где будем обсуждать: текущую ситуацию на рынке, собеседования, проекты, выпуски, книги.
-Будем вести базу знаний, сделаем родмап обучения для любого уровня и будем сохранять все статьи, выжимки из книг, видео-материалов в Notion. И многое другое :)

Свои люди

$ 3,2 per month
- Доступ к закрытому чату, где вы можете влиять на контент или стать гостем выпуска
- Еженедельные созвоны с подписчиками, где будем обсуждать: текущую ситуацию на рынке, собеседования, проекты, выпуски, книги.
- Помощь от меня и Екатерины по проекту, по трудоустройству и т.д
- Будем вести базу знаний, сделаем родмап обучения для любого уровня и будем сохранять все статьи, выжимки из книг, видео-материалов в Notion. 
И многое другое :)

Senior

$ 5,4 per month
- Доступ к закрытому чату, где вы можете влиять на контент или стать гостем выпуска
- Еженедельные созвоны с подписчиками, где будем обсуждать: текущую ситуацию на рынке, собеседования, проекты, выпуски, книги
- Помощь от меня и Екатерины по проекту, по трудоустройству и т.д
- Будем вести базу знаний, сделаем родмап обучения для любого уровня и будем сохранять все статьи, выжимки из книг, видео-материалов в Notion.
- Возможность быть ведущим в некоторых рубриках, выпусках.
Go up