В течение последнего месяца я работал над проектом для некоммерческого Eco-Soap Bank вместе с товарищем по команде Crystal Knight. Eco-Soap Bank — это организация, которая сотрудничает с отелями и другими организациями для переработки малоиспользованного мыла и распространения его среди людей в неблагополучных странах. Итак, нам было поручено внести свой вклад в уже разработанное приложение для iOS, чтобы реализовать функции, которые помогут организации отслеживать доставку продуктов, отслеживать статистику воздействия продуктов и управлять отелями, что поможет организации построить управление. Поскольку это был мой первый опыт создания продукта для сторонней организации, не связанной со школьным проектом Lambda, я позаботился о правильной и профессиональной реализации функций, включая разработку динамической функциональности и масштабируемости. Но это был опыт обучения, потому что он помог мне насладиться рабочей средой, какой она может быть в профессиональной компании.

Чтобы разбить дорожную карту, нам пришлось принимать важные решения, в которых у нас были немного разные идеи. Но, сопоставив их вместе, мы пришли к хорошим выводам. Например, было 2 типа пользователей, которые нам понадобились для создания функций в зависимости от их роли. Итак, поскольку мы тоже два товарища по команде, мы назначили друг другу пользователя для работы, чтобы сосредоточиться именно на том, над какими функциями работать. Позвольте мне показать вам пример:

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

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

Преодоление препятствий

Общий вызов

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

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

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

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

Технический вызов

Я работал над проектом с UITableView внутри контроллера представления, и это было очень сложно, потому что я имел дело с двумя разными контроллерами, которые собирались делегировать в одном и том же контроллере представления. Например, мне нужно было делегировать UITextField внутри строки UITableViewCell из контроллера представления, который делегировал UITableView, чтобы сохранить данные из ввода текстового поля. Если это не имеет смысла, давайте посмотрим на пример в коде.

Я реализовал протокол, поэтому он может работать для отправки данных в другие представления. Протокол — это своего рода план, который выполняет определенную задачу. Переменная textField внутри протокола была назначена текстовому полю в ячейке табличного представления, чтобы оно могло функционировать как текстовое поле, имитирующее эти необходимые данные. Чтобы полностью заставить его работать, мне пришлось заставить протокол принять класс ячейки табличного представления и реализовать свойство контроллера представления, как в следующем фрагменте кода.

Теперь самое интересное. Как видите, UITextFieldDelegate был вызван для настройки текстового поля, целью которого было присвоить его переменной протокола. Способ назначить его состоял в том, чтобы вызвать функцию, предоставленную UITextFieldDelegate бесплатно.

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

Получение преимуществ

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

Вот видео, которое показывает и объясняет функции приложения.

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

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

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

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