Чистая реализация вложенных/сложных объектов Android Room.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Чистая реализация вложенных/сложных объектов Android Room.

Сообщение Anonymous »


Я хочу использовать библиотеку Android Jetpack Room в своем личном проекте, но не могу понять, как работать с большим количеством вложенных объектов списка.

В Сеансе тренировки есть список Упражнений. Упражнение имеет список Повторений. У меня есть отдельные объекты БД и модели бизнес-логики.

@Entity(tableName = "workout_session") класс данных WorkoutSessionEntity( @PrimaryKey(autoGenerate = true) val WorkSessionId: Long = 0, имя значения: String = "" ) @Entity(tableName = "упражнения") класс данных УпражнениеEntity( @PrimaryKey(autoGenerate = true) val упражнениеId: Long, @ColumnInfo(defaultValue = «workoutSessionId») val WorkoutSessionId: Long, ) @Entity(tableName = "reps") класс данных RepsEntity( @PrimaryKey(autoGenerate = true) действительный идентификатор: Long = 0, вес значения: Float = 0f, val повторы: Int = 0, порядок значений: Int = 0, val упражненийId: Long = 0, ) Чтобы получить соответствующие упражнения для тренировок и повторения для упражнений из базы данных, я использую классы отношений, такие как:

класс данных PracticeWithReps( @Embedded val упражнение: УпражнениеEntity, @Связь( родительский столбец = "идентификатор упражнения", entityColumn = "идентификатор упражнения" ) val повторы: List) класс данных WorkoutWithExercisionsAndReps( @Embedded val sessionEntity: WorkoutSessionEntity, @Связь( сущность = УпражнениеEntity::класс, родительский столбец = "идентификатор сеанса тренировки", entityColumn = "workoutSessionId", ) val упражнения: List ) Я не уверен в том, какой способ будет наиболее простым в использовании упражнений с упражнениями и тренировками. На самом деле для меня нет смысла передавать WorkoutWithExercisionsAndReps, поскольку это длинное имя класса и в нем есть классы, связанные с БД. У меня есть два решения, которые я рассматриваю.
[*]Сопоставление их с внутренними моделями WorkoutSessionData и PracticeData, как показано ниже:
класс данных PracticeEntity( @PrimaryKey(autoGenerate = true) val упражнениеId: Long, @ColumnInfo(defaultValue = «workoutSessionId») val WorkoutSessionId: Long, @ColumnInfo(defaultValue = «movement_id») val motionDataId: Long, @ColumnInfo(defaultValue = «template_id») val templateId: Длинный? = ноль ) класс данных УпражнениеДанные( val упражнениеId: Длинный, val тренировкиSessionId: Long, val упражнения: List = пустойList() ) fun getExercision(exersizedId: Long): Flow { упражнениеРепозиторий .getExercisionWithReps(идентификатор упражнения) .карта { // Сопоставляем объект УпражненияСReps с объектом УпражненияДанные со списком упражнений } } или 2. Создать новые модели для объектов отношений и вместо этого передать их? Я начал это делать, но мне интересно, не упускаю ли я что-то очевидное о том, почему это неправильно?
класс данных УпражнениеRelation( @Embedded val упражнение: PracticeDataEntity, @Связь( родительский столбец = "идентификатор упражнения", entityColumn = "идентификатор упражнения" ) val упражненияReps: List, ... ) весело УпражнениеRelation.toInternalModel() = Упражнение( данные упражнения = упражнение.toInternalModel(), повторы = упражненияReps.map { it.toInternalModel() }.toList() ) класс данных Упражнение( val упражненияДанные: Данные упражнений, val повторы: List = mutableListOf() ) весело Упражнение.toRelationModel(): УпражнениеRelation = Отношение Упражнения( упражнение = упражнениеData.asEntityModel(), упражнениеReps = Reps.map { it.asEntity() }, ) класс УпражнениеДанные( действительный идентификатор: Длинный = 0, val тренировкиSessionId: Long = 0, ) весело УпражнениеДанные.asEntityModel() = УпражнениеДанныеEntity( идентификатор упражнения = идентификатор, идентификатор тренировкиSession = идентификатор сессии тренировки, ) @Entity(tableName = "упражнения") класс данных PracticeDataEntity( @PrimaryKey(autoGenerate = true) val упражнениеId: Long, @ColumnInfo(defaultValue = «workoutSessionId») val WorkoutSessionId: Long ) весело УпражнениеДанныеEntity.toInternalModel() = УпражнениеДанные( идентификатор = идентификатор упражнения, идентификатор тренировкиSession = идентификатор сессии тренировки, )
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»