Уважаемое хабра-сообщество, здравствуйте! В этой части статьи мы завершим исследование простого приложения со списком покупок.
Я хотел бы напомнить вам, что в первый часть рассматривается структура проекта, и второй часть посвящена некоторым стандартным элементам графического интерфейса.
Сегодня читатель может рассчитывать на работу с базой данных, организацию поиска, а также локализацию и прочие «доделки».
Все коммиты открытого Git-репозиторий снабжены комментариями; для каждого этапа в тексте указаны соответствующие теги.
Добро пожаловать коту! Часть вторая ЧАСТЬ ТРЕТЬЯ Tizen SDK предлагает ряд встроенных инструментов для работы с данными.
Для простых задач, таких как наша, можно использовать обычное чтение/запись в файл.
Работа с файлами подробно описана с примерами в разделе документация .
В случаях, когда требуется гибкость и большие объемы данных, существует механизм доступа к встроенной базе данных SQLite. Нам будет полезно быстро искать записи и удобно изменять порядок списка покупок.
Для работы с базой данных существует целый арсенал средства.
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-мя основными классами: 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 столбец.
Полная реализация паттерна подразумевает, что все его модули должны каким-то образом взаимодействовать друг с другом.
Это можно сделать напрямую через указатели, через посредника или через модель событий; в общем способов много, со своими плюсами и минусами.
На практике я обычно использую фабрику и менеджер объектов, которые позволяют объектам безопасно взаимодействовать друг с другом через интерфейс сообщений.
Конечно, поскольку объекты модели и контроллера будут присутствовать в единственном экземпляре, первое, что приходит на ум, — создать их экземпляры через синглтон.
Соблазн велик, но в реальном мире требования к программному обеспечению постоянно меняются, а это значит, что любые монолиты в коде со временем устаревают. Думаю, эта тема заслуживает отдельного рассмотрения, а теперь, не отвлекаясь на вопросы архитектуры, разместим весь код в ShoppingListMainForm. Напомню, наш проект – образовательный! Форма ShoppingListMainForm загружается один раз при запуске приложения и закрывается при выходе из него, поэтому удобно подключать/отключать базу данных в соответствующих обработчиках событий:
Теги: #tizen sdk #tizen sdk #tizen ui Builder #native development #kamagames #kama games #Разработка мобильных приложений #Разработка для Tizenresult ShoppingListMainForm::OnInitializing(void) {
-
Как Узнать Хорошего Разработчика?
19 Oct, 24 -
Броуновское Движение Простых Чисел
19 Oct, 24 -
Сохраняйте Api Простым
19 Oct, 24 -
Ie Упал До Рекордно Низкого Уровня
19 Oct, 24 -
Amd Puma Преследует Intel Centrino
19 Oct, 24