Другой ORM? Почему?

Погружение в мир Flutter - настоящее увлекательное приключение. Поскольку это довольно новый фреймворк, существует множество возможностей для разработки новых библиотек. В результате я подумал, что это хорошая возможность настроить ORM, чтобы ответить на дополнительные вопросы. Цель состоит в том, чтобы иметь структуру, которая, помимо реляционного сопоставления, обеспечивает возможность создания каркасов для основных случаев использования: учетная запись пользователя, пользовательские данные, отслеживание данных (создание, обновление, удаление), мягкое удаление. Так начинается история f-orm-m8.

Целевая аудитория

Разработчики Dart / Flutter

Вступление

Платформа добавляет определения для набора типов, которые можно комбинировать для расширения возможностей ORM в аннотированном коде. Текущая версия определяет два основных типа аннотаций и несколько помощников, связанных с каждым определением:

  • DataTable
  • DataColumn

Чтобы упростить создание кода, определены четыре абстрактных класса:

  • DbOpenEntity: неограниченный объект
  • DbEntity: объект с идентификатором в качестве первичного ключа.
  • DbAccountEntity: шаблон учетной записи пользователя с идентификатором в качестве первичного ключа.
  • DbAccountRelatedEntity: объекты данных, связанные с пользователем.

Таблица данных

DataTable описывает требуемое имя для таблицы вместе с битовой маской для необязательных TableMetadata. Метаданные таблицы указываются с параметром metadataLevel и являются синтаксическим сахаром для создания правильной фикстуры без явного добавления обязательных полей.

TableMetadata

TableMetadata описывает основные параметры таблицы:

  • мягкий
  • trackCreate
  • trackUpdate

Параметры можно комбинировать различными способами, используя | оператор

DataColumn

DataColumn описывает, как поля будут преобразованы в атрибуты сущности. Конструктор DataColumn имеет три параметра:

  • name
    - назначение: указать имя сущности
    - тип: String
    - позиционный
    - обязательный
  • metadataLevel
    - цель: синтаксический сахар для определения распространенных вариантов использования
    - тип: int как комбинация ColumnMetadata
    - с именем
    - необязательно
  • compositeConstraints
    - назначение: режим мелкой зернистости для определения составных ограничений
    - тип: List ‹CompositeConstraint›
    - с именем
    - необязательно

СтолбецМетаданные

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

  • игнорировать
  • основной ключ
  • уникальный
  • ненулевой
  • автоматическое приращение
  • проиндексирован

Параметры можно комбинировать различными способами с помощью | оператор

Ограничения primaryKey, unique, indexed могут быть сгенерированы целевым образом с помощью CompositeConstraint.

CompositeConstraint

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

  • name - имя ограничения
  • constraintType - тип ограничения в виде перечисления со следующими значениями:
    - unique,
    - primaryKey,
    - foreignKey,
    - indexed

Простой подход

DataColumn описывает требуемое имя для столбца в сочетании с битовой маской для требуемых метаданных столбца.

Точно настроенный подход

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

Интерфейсы

DbOpenEntity

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

DbEntity

Может использоваться для шаблона модели общего назначения с целочисленным первичным ключом с именем id

DbAccountEntity

Он реализует DbEntity. Может использоваться для шаблона модели в общей учетной записи пользователя со следующими полями:

  • имя пользователя
  • Эл. адрес
  • Сокращенное название
  • isCurrent

DbAccountRelatedEntity реализует DbEntity

Он реализует DbEntity. Может использоваться для шаблона модели в универсальной, зависящей от учетной записи, сущности со следующими полями:

  • accountId

Соглашение об использовании

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

Все готово? Пойдем

Вы ищете воплощение, не так ли? Затем прочтите, как быстро создать приложение CRUD с помощью f-orm-m8.

использованная литература



Если у вас есть какие-либо вопросы или вы хотите оставить отзыв, вы можете оставить их ниже, в Gitter или Twitter.

Да пребудет с вами f-orm-m8!