Category: IT Образование

Продолжаем Избавляться От Шаблонного Кода

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

  • Благодаря механизму Respnder Chain, код не пронизан ненужными связями между компонентами, нет необходимости заводить лишние классы-роутеры.
  • Данный код позволяет нам полностью абстрагироваться от реализации ячейки, её класса, идентификатора и прочего.
  • Из недостатков данного подхода стоит отметить невозможность использования нескольких различных типов представления для одной и той же view model в рамках одной таблицы.
  • Ответственность данного класса будет заключаться в возвращении массива ячеек, разбитых по секциям (секция пока может быть всего лишь одна).
  • Реализовать табличный источник данных, с помощью которого можно легко добавлять новые ячейки с любым типом данных в табличку.

В предыдущих статьях мы описали мотивы и подход, используемый для решения проблемы дублирования кода из контроллера в контроллер. Класс TableViewDataSource реализовывает протокол UITableViewDataSource в соответствии с принципом единственной ответственности. Ответственность данного класса будет заключаться в возвращении массива ячеек, разбитых по секциям (секция пока может быть всего лишь одна). При этом, чтобы данный класс был переиспользуемым, он не должен знать ничего ни о типе ячеек, которые он возвращает, ни об их идентификаторах, классах и nib’ах.

Вывод Типа Шаблона Исходя Из Параметров Функции

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

Как избавиться от шаблонного многострочного кода

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

На следующем рисунке дополним диаграмму классов селекторами, которые хранятся внутри универсального делегата. Розовые стрелки показывают ссылки делегата на селекторы функций внутри любых компонентов слоя представления (слой пользовательского интерфейса). Не следует путать розовые ссылки https://deveducation.com/ с сильными и слабыми ссылками на диаграмме классов. При нажатии на ячейку попробуем получить для неё вьюмодель из провайдера данных. Одно из преимуществ показанного подхода — его простота и понятность. Минимальный порог входа для начала использования данного решения с ходу — middle.

Избавление От Шаблонного Кода: Как Будет Выглядеть Источник Данных?

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

Как избавиться от шаблонного многострочного кода

Для этого найдём ячейку для текущего indexPath, с которой взаимодействовал пользователь. Эта ячейка понадобится, чтобы передать её параметром в вызываемый селектор по правилу определения action-селекторов. Параметр необязателен, но сильно поможет вызванному коду определить, откуда он был вызван, чтобы, например, получить данные из вызывающего кода.

Многие из них являются фейками, созданные таким образом, как я сейчас опишу. Все textbox’ы расставлены в нужных местах формы, а при выполнении кода, появляется в углу один элемент textbox, или 50 в одном месте. Как я могу изменить значение в десятичной запятой с запятой, например, 2,532,00 до 2532 в моей таблице.

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

Код К Задаче: «как Избавиться От Повторяющегося Кода?»

Для переиспользуемого табличного источника данных нужен провайдер. Он будет скрывать за собой логику преобразования данных, хранящихся в любом возможном виде, к той самой структуре массива ячеек, разбитых по секциям. Это необходимо, чтобы наш источник данных не зависел от входящей коллекции данных. Также не будет необходимости переписывать его при изменении типа коллекции, хранящей данные. Ещё одним плюсом станет возможность использования данного провайдера при работе с UICollectionView (об этом поговорим в одной из будущих статей).

Благодаря механизму Respnder Chain, код не пронизан ненужными связями между компонентами, нет необходимости заводить лишние классы-роутеры. Generic-тип регистрируемой ячейки Cell является потомком системной UITableViewCell, реализующим generic-протокол Configurable. Я буду показывать создание шутки с агентом поддержки, а именно с агентом 3-х сотым, так как его шутки наиболее актуальны в сети.

Комментарии К Статье: 25

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

Шаблоны И Stl

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

Как Избавиться От Повторяющегося Кода?

В этой статье рассмотрим, как избавиться и от такого кода. Конкретная реализация протокола ViewModelDataProvider – ArrayDataProvider. Она работает с одномерными массивами и используется, чтобы отображать данные в одну секцию UITableView или UICollectionView. @AhsanMughal – у этого подхода могут быть некоторые негативные побочные эффекты, но я еще ничего не вижу. Более того, это помогает мне поддерживать чистоту и актуальность кода. Как предложил Тим, вы можете выполнять итерацию с помощью элементов управления и устанавливать каждый из них соответственно.

Соответственно, необходимым и достаточным функционалом будущего переиспользуемого делегата будет являться обработка нажатия на ячейку. Данный код позволяет нам полностью абстрагироваться от реализации ячейки, её класса, идентификатора и прочего. Как избавиться от шаблонного многострочного кода в iOS-приложении При этом мы получаем все преимущества статической типизации при связывании ячейки с её view model. Очевидно, что по принципу инверсии зависимостей провайдер данных должен быть закрыт протоколом, определённым на уровне TableViewDataSource.

Read More
bloguser March 30, 2021 0 Comments