Пишем Свой Орм Для Андроид С Канастой И Сеньоритой, Часть 3



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

За время моих размышлений подход к созданию приложения немного трансформировался, и поэтому до объектной модели я добрался только три недели назад. И почти сразу я столкнулся с необходимостью улучшения УКАОрм .

Кому интересно узнавать не только о тех инновациях, которые уже внедрены, но и о том, что еще находится в разработке -



Изменения и дополнения

Первое, с чем я столкнулся, это необходимость Поставщик услуг 'е и в Курсор ’е.

С Поставщик услуг ’ом особых проблем не было - аннотация Ормконтентпровидер унаследовано от Поставщик услуг ’a и на данный момент реализует два метода: запрос , получение ОрмГде и возвращение ОрмКурсор , И обновлять , который получает экземпляр, подлежащий обновлению.

ОрмКурсор унаследован от АннотацияКурсор и, помимо реализации всех необходимых методов, он также реализует метод getEntities - возвращение Список объекты.

Наиболее интересной с точки зрения реализации является функция getColumnNames , который возвращает массив имен столбцов (функция getOrmFields уже переделано) и приватная функция ПолучитьОбъект , возвращая значение указанного столбца.

Эти классы значительно упростили разработку учетной записи синхронизации.

Вторым нововведением стала поддержка новых типов полей: логическое значение И целочисленный массив .

Если с логическое значение все более-менее понятно, дальше примерно множество Я скажу вам немного больше.

Сначала пришла идея создать дополнительную таблицу под названием « имя класса_имя поля » и один столбец типа компонента массива.

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

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

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

Кроме того, я наконец-то дошел до реализации метода getDefaultValues в наследнике ОрмХелпер 'А.

Теперь это выглядит так:

  
  
  
  
  
   

@Override public void getDefaultValues(Class<? extends OrmEntity> entityClass, List<OrmEntity> valueList) { }

соответственно, добавив значения по умолчанию для нашей любимой модели из второй части будут реализованы следующим образом:

public void getDefaultValues(Class<? extends OrmEntity> entityClass, List<OrmEntity> valueList) { if (entityClass.equals(CarType.class)) { valueList.add(new CarType("Passenger")); valueList.add(new CarType("Truck")); } }

Ну вот мы и подошли к самой вкусной проблеме, о которой я говорил.

Хардекс Также в первый статья - обновление схемы данных.



Обновление схемы данных

Опять же, давайте вернемся к нашей модели и посмотрим на сущность Машина :

@Table(rightJoinTo = {Truck.class}) public class Car extends BaseEntity { @Column(name = "car_type") private CarType type; @Column private List<Wheel> wheels; @Column(name = "engine_power") private int enginePower; @Column(name = "doors_count") private int doorsCount; }

Допустим, мы решили добавить еще одно поле:

@Column(name = "max_speed") private int maxSpeed;

В этом случае нам нужно изменить версию базы данных в манифесте:

<meta-data android:name="UO_DB_VERSION" android:value="2" />

И напишите код в методе помощник по обновлению 'А:

@Override protected void onUpgrade(int oldVersion, int newVersion) {

Теги: #Android #orm #ucaorm #java orm #собственный проект #Собственный опыт #Разработка под Android #SQLite
Вместе с данным постом часто просматривают: