Тай'дзен: Первые Шаги (Часть 3)

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

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

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

Все коммиты открытого Git-репозиторий снабжены комментариями; для каждого этапа в тексте указаны соответствующие теги.

Добро пожаловать коту! Часть вторая ЧАСТЬ ТРЕТЬЯ Tizen SDK предлагает ряд встроенных инструментов для работы с данными.

Для простых задач, таких как наша, можно использовать обычное чтение/запись в файл.

Работа с файлами подробно описана с примерами в разделе документация .

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



Тай'Дзен: первые шаги (часть 3)

Для работы с базой данных существует целый арсенал средства.

Tizen::Io::База данных предназначен для доступа к базе данных: подключения, непосредственного выполнения SQL-запросов и т.п.

Tizen::Io::DbStatement позволяет удобно формировать запрос и прикреплять к нему данные: числовые, строковые, двоичные — разумеется, в контексте синтаксиса SQLite. Tizen::Io::DbEnumerator отвечает за извлечение данных из результата запроса.

Это минимальный набор для работы с базой данных.

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

Tizen SDK также включает в себя дополнительные инструменты, упрощающие вашу работу, например: SqlStatementBuilder — удобно генерирует простые запросы, Элементы управления данными – обмен данными между приложениями, Tizen::Io::DataSet , Tizen::Io::DataRow – для работы с таблицами в памяти и т.д. Начнем с печки, т.е.

непосредственно с файла базы данных SQLite. Его можно создать при первом запуске приложения (а в документация подробно описано, как это сделать), также можно создать таблицу с помощью SQL-запроса.

Я предпочитаю использовать уже сгенерированный файл SQLite с заранее подготовленными таблицами.

Для этих целей удобно использовать SQLite-менеджер -om – плагин для Firefox. Инструмент кроссплатформенный и достаточно функциональный.

Те, кому его возможностей недостаточно, могут воспользоваться консольной утилитой с официального сайта SQLite. Сохраняем новый файл базы данных в каталоге data, который является корневым каталогом проекта Tizen (см.

первый часть статьи).

Нам понадобятся 2 таблицы: в одной мы будем хранить покупки, а в другой — списки покупок:

Тай'Дзен: первые шаги (часть 3)



Тай'Дзен: первые шаги (часть 3)

Как я уже упоминал, в большинстве проектов я использую собственную обертку для работы с базой данных над 3-мя основными классами: Tizen::Io::Database, Tizen::Io::DbStatement и Tizen::Io::DbEnumerator. Классы DataSet и DataRow не упоминаются в документации в контексте работы с базами данных, за исключением того, что они используют одно и то же корневое пространство имен Tizen::Io. Неудивительно, что я обнаружил их после того, как написал собственные реализации (есть оправдание!).

В любом случае они работают, и вы можете увидеть их в коммите под меткой v0.3 .

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

Кратко перечислим его основные модули:

  • DbRow – интерфейс, потомки которого инкапсулируют строки таблицы;
  • DbDataSet – хранилище для набора DbRow;
  • DbAccess – отвечает за подключение/отключение базы данных, чтение отдельных значений (метод GetValue), чтение/запись целых таблиц (FillDataSet, UploadDataSet) и выполнение командных запросов с параметрами (PerformRequest);
  • DbQuery – объединяет строковый запрос и его параметры в одном объекте;
  • DbRowBuilder – интерфейс для создания реализаций DbRow, используемый DbDataSet;
  • DbValue – значение универсального поля, тип которого определяется при создании;
  • DbRowValue — стандартная реализация DbRow, используемая, когда необходимо прочитать только 1 столбец.

Давайте теперь вернемся к варианту шаблона MVC, обсуждавшемуся в первой части.

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

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

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

Конечно, поскольку объекты модели и контроллера будут присутствовать в единственном экземпляре, первое, что приходит на ум, — создать их экземпляры через синглтон.

Соблазн велик, но в реальном мире требования к программному обеспечению постоянно меняются, а это значит, что любые монолиты в коде со временем устаревают. Думаю, эта тема заслуживает отдельного рассмотрения, а теперь, не отвлекаясь на вопросы архитектуры, разместим весь код в ShoppingListMainForm. Напомню, наш проект – образовательный! Форма ShoppingListMainForm загружается один раз при запуске приложения и закрывается при выходе из него, поэтому удобно подключать/отключать базу данных в соответствующих обработчиках событий:

   

result ShoppingListMainForm::OnInitializing(void) {

Теги: #tizen sdk #tizen sdk #tizen ui Builder #native development #kamagames #kama games #Разработка мобильных приложений #Разработка для Tizen
Вместе с данным постом часто просматривают: