Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Basebelisi bohle ba nka UI e potlakileng le e arabelang habonolo lits'ebetsong tsa mehala. Haeba sesebelisoa se nka nako e telele ho qala, mosebelisi o qala ho ikutloa a hloname le ho halefa. O ka senya boiphihlelo ba bareki habonolo kapa oa lahleheloa ke mosebelisi ka botlalo le pele a qala ho sebelisa sesebelisoa.

Re kile ra fumana hore app ea Dodo Pizza e nka metsotsoana e 3 ho qala ka karolelano, 'me ho "ba lehlohonolo" ba bang ho nka metsotsoana e 15-20.

Ka tlase ho sehiloeng ho na le pale e nang le qetello e monate: mabapi le kholo ea polokelo ea sebaka sa Realm, ho lutla ha mohopolo, kamoo re bokeletseng lintho tse hahelletsoeng, ebe re itšoarella hammoho le ho lokisa tsohle.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele
Mongoli oa sengoloa: Maxim Kachinkin - Moqapi oa Android ho Dodo Pizza.

Metsotsoana e meraro ho tloha ho tobetsa lets'oao la ts'ebeliso ho ea ho Resume() ea ts'ebetso ea pele ha e na moeli. 'Me ho basebelisi ba bang, nako ea ho qala e fihlile metsotsoana e 15-20. Hona ho ka khoneha joang?

Kakaretso e khutšoanyane haholo bakeng sa ba se nang nako ea ho bala
Sebaka sa rona sa polokelo ea litaba sa Realm se ile sa hola ka ho sa feleng. Lintho tse ling tse neng li le sehlaheng ha lia ka tsa hlakoloa, empa li ne li lula li bokelloa. Nako ea ho qala kopo e ile ea eketseha butle-butle. Eaba re e lokisa, 'me nako ea ho qala e fihlile ho sepheo - e ile ea e-ba ka tlase ho motsotsoana oa 1 mme ha e sa hlola e eketseha. Sengoliloeng se na le tlhahlobo ea boemo le tharollo tse peli - e potlakileng le e tloaelehileng.

Batla le ho sekaseka bothata

Kajeno, sesebelisoa leha e le sefe sa mohala se tlameha ho qala kapele 'me se arabele. Empa ha se feela ka app ea mobile. Boiphihlelo ba mosebelisi ba ho sebelisana le tšebeletso le k'hamphani ke ntho e rarahaneng. Mohlala, molemong oa rona, lebelo la ho beleha ke e 'ngoe ea matšoao a mantlha a ts'ebeletso ea pizza. Haeba ho beleha ho potlakile, pizza e tla chesa, 'me moreki ea batlang ho ja hona joale ha a na ho ema nako e telele. Bakeng sa ts'ebeliso, ho bohlokoa ho theha maikutlo a ts'ebeletso e potlakileng, hobane haeba ts'ebeliso e nka metsotsoana e 20 feela ho qala, joale u tla tlameha ho emela pizza nako e kae?

Qalong, rona ka borona re ne re tobane le taba ea hore ka linako tse ling kopo e nka metsotsoana e seng mekae ho qala, ebe re qala ho utloa litletlebo ho tsoa ho basebetsi-'moho le rona mabapi le hore na e nkile nako e kae. Empa ha rea ​​ka ra khona ho pheta boemo bona khafetsa.

Ke nako e kae? Ho latela Litokomane tsa Google, haeba ho qala ho bata ha kopo ho nka metsotsoana e ka tlaase ho 5, joale sena se nkoa e le "joalokaha eka se tloaelehile". Sesebelisoa sa Dodo Pizza Android se qalile (ho ea ka metrics ea Firebase _app_start) ho qaleho e batang ka karolelano ka metsotsoana e 3 - "Ha e ntle, ha e mpe," joalo ka ha ba re.

Empa joale litletlebo li ile tsa qala ho hlaha hore kopo e nkile nako e telele haholo ho qala! Ho qala, re nkile qeto ea ho lekanya hore na "haholo, haholo, nako e telele haholo" ke eng. Mme re sebelisitse mohlala oa Firebase bakeng sa sena Sesebelisoa se qala ho latela.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Tsela ena e tloaelehileng e lekanya nako pakeng tsa nako eo mosebelisi a bulang kopo le nako eo onResume() ea ketsahalo ea pele e etsoang. Ho Firebase Console metric ena e bitsoa _app_start. Ho ile ha etsahala hore:

  • Linako tsa ho qala bakeng sa basebelisi ba kaholimo ho liperesente tse 95 li batla li le metsotsoana e 20 (ba bang le ho feta), leha nako ea ho qala e batang e le ka tlase ho metsotsoana e 5.
  • Nako ea ho qala ha se boleng bo sa feleng, empa e hola ka nako. Empa ka linako tse ling ho na le marotholi. Re fumane mokhoa ona ha re eketsa tekanyo ea tlhahlobo ho matsatsi a 90.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Ho ile ha fihla mehopolo e ’meli:

  1. Ho na le ho dutla.
  2. "Ntho" ena e hlophisoa bocha kamora ho lokolloa ebe e lutla hape.

"Mohlomong ho na le ntho e nang le database," re ile ra nahana, 'me re nepile. Taba ea pele, re sebelisa database joalo ka cache; nakong ea ho falla rea ​​e hlakola. Taba ea bobeli, database e laeloa ha kopo e qala. Tsohle di kopane.

Phoso ke eng ka database ea Realm

Re ile ra qala ho lekola hore na litaba tsa database li fetoha joang bophelong ba ts'ebeliso, ho tloha ts'ebetsong ea pele le ho feta nakong ea ts'ebeliso e sebetsang. U ka sheba litaba tsa polokelo ea sebaka sa Realm ka stetho kapa ka ho qaqileng haholoanyane le ka ho hlaka ka ho bula faele ka Realm Studio. Ho sheba litaba tsa database ka ADB, kopitsa faele ea database ea Realm:

adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}

Ha re se re shebile litaba tsa database ka linako tse fapaneng, re fumane hore palo ea lintho tsa mofuta o itseng e ntse e eketseha.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele
Setšoantšo se bontša sekhechana sa Realm Studio bakeng sa lifaele tse peli: ka ho le letšehali - setsi sa kopo nako e itseng ka mor'a ho kenya, ka ho le letona - ka mor'a tšebeliso e sebetsang. Ho ka bonoa hore palo ea lintho ImageEntity и MoneyType e eketsehile haholo (screenshot e bontsha palo ya dintho tsa mofuta o mong le o mong).

Kamano lipakeng tsa kholo ea database le nako ea ho qala

Khōlo ea database e sa laoleheng e mpe haholo. Empa see se ama nako ea ho qala kopo joang? Ho bonolo haholo ho lekanya sena ka ActivityManager. Ho tloha ka Android 4.4, logcat e bonts'a log e nang le khoele e bontšitsoeng le nako. Nako ena e lekana le nako ho tloha ha ts'ebeliso e qala ho fihlela qetellong ea ts'ebetso. Nakong ena liketsahalo tse latelang li etsahala:

  • Qala tshebetso.
  • Ho qala hoa dintho.
  • Pōpo le ho qala mesebetsi.
  • Ho theha moralo.
  • Tlhahiso ea ts'ebeliso.

E re loketseng. Haeba u tsamaisa ADB ka lifolakha tsa -S le -W, u ka fumana tlhahiso e atolositsoeng ka nako ea ho qala:

adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN

Haeba u e tšoara ho tloha moo grep -i WaitTime Ka nako, o ka etsa pokello ea metric ena 'me u shebe liphetho ka mahlo. Kerafo e ka tlase e bonts'a ho its'etleha ha nako ea ho qala ts'ebeliso ho palo ea ho qala ho bata ha kopo.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Ka nako e ts'oanang, ho ne ho e-na le mofuta o tšoanang oa kamano pakeng tsa boholo le kholo ea database, e ileng ea hōla ho tloha ho 4 MB ho ea ho 15 MB. Ka kakaretso, ho ile ha fumaneha hore ha nako e ntse e feta (ka kholo ea serame e qala), nako ea ho qala kopo le boholo ba database bo ile ba eketseha. Re na le khopolo-taba matsohong a rona. Hona joale ho neng ho setse feela ho tiisa ho itšetleha. Ka hona, re nkile qeto ea ho tlosa "ho lutla" 'me re bone hore na sena se tla potlakisa ho qala.

Mabaka a kholo e sa feleng ea database

Pele o tlosa "ho lutla", ho bohlokoa ho utloisisa hore na ke hobane'ng ha li hlahile pele. Ho etsa sena, a re hopoleng hore na Realm ke eng.

Realm ke polokelo ea boitsebiso e sa amaneng le likamano. E u lumella ho hlalosa likamano lipakeng tsa lintho ka tsela e ts'oanang le hore na ho hlalosoa li-database tse kae tsa ORM ho Android. Ka nako e ts'oanang, Realm e boloka lintho ka kotloloho mohopolong ka liphetoho tse nyane le limmapa. Sena se o nolofalletsa ho bala data ho tswa ho disk kapele haholo, e leng matla a Realm le hore na ke hobane'ng ha e ratoa.

(Mabakeng a sengoloa sena, tlhaloso ena e tla lekana bakeng sa rona. U ka bala haholoanyane ka Realm in the cool litokomane kapa ho tsona akatemi).

Bahlahisi ba bangata ba tloaetse ho sebetsa haholoanyane ka li-database tsa likamano (mohlala, li-database tsa ORM tse nang le SQL tlasa hood). 'Me lintho tse kang cascading ya data hlakolwa hangata ho bonahala e le fanoeng. Empa eseng Mmusong.

Ka tsela, karolo ea ho hlakola cascade e 'nile ea botsoa ka nako e telele. Sena tlhabollo и enngwe, e amanang le eona, ho ile ha buisanoa ka mafolofolo. Ho ne ho e-na le maikutlo a hore e tla tloha e etsoa. Empa joale ntho e 'ngoe le e' ngoe e fetoletsoeng ho kenyelletsong ea li-link tse matla le tse fokolang, tse neng li tla boela li rarolle bothata bona. O ne a le mafolofolo a bile a le mafolofolo mosebetsing ona ho hula kopo, e seng e emisitsoe hajoale ka lebaka la mathata a kahare.

Ho dutla ha data ntle le ho hlakoloa

Hantle-ntle data e lutla hakae haeba u itšetlehile ka ho tlosoa ha cascading e seng teng? Haeba u kentse lintho tsa Realm, joale li tlameha ho hlakoloa.
Ha re shebeng (hoo e batlang e le) mohlala oa sebele. Re na le ntho CartItemEntity:

@RealmClass
class CartItemEntity(
 @PrimaryKey
 override var id: String? = null,
 ...
 var name: String = "",
 var description: String = "",
 var image: ImageEntity? = null,
 var category: String = MENU_CATEGORY_UNKNOWN_ID,
 var customizationEntity: CustomizationEntity? = null,
 var cartComboProducts: RealmList<CartProductEntity> = RealmList(),
 ...
) : RealmObject()

Sehlahisoa se kariki se na le masimo a fapaneng, ho kenyelletsa le setšoantšo ImageEntity, metsoako e hlophisitsoeng CustomizationEntity. Hape, sehlahisoa se kariking e ka ba motsoako o nang le lihlahisoa tsa oona RealmList (CartProductEntity). Libaka tsohle tse thathamisitsoeng ke lintho tsa Realm. Haeba re kenya ntho e ncha (copyToRealm() / copyToRealmOrUpdate()) ka id e tšoanang, ntho ena e tla ngoloa ka ho feletseng. Empa lintho tsohle tse ka hare (setšoantšo, customizationEntity le cartComboProducts) li tla lahleheloa ke kamano le motsoali 'me li lule sebakeng sa polokelo.

Kaha khokahano le tsona li lahlehile, ha re sa li bala kapa ra li hlakola (ntle le haeba re li fumana ka ho hlaka kapa re hlakola "tafole" eohle). Re bitsitse sena "ho lutla ha memori".

Ha re sebetsa le Realm, re tlameha ho hlahloba likarolo tsohle le ho hlakola ntho e 'ngoe le e' ngoe ka ho hlaka pele ho ts'ebetso e joalo. Sena se ka etsoa, ​​ka mohlala, joalo ka:

val entity = realm.where(CartItemEntity::class.java).equalTo("id", id).findFirst()
if (first != null) {
 deleteFromRealm(first.image)
 deleteFromRealm(first.customizationEntity)
 for(cartProductEntity in first.cartComboProducts) {
   deleteFromRealm(cartProductEntity)
 }
 first.deleteFromRealm()
}
// и потом уже сохраняем

Haeba u etsa joalo, tsohle li tla sebetsa kamoo li lokelang. Mohlaleng ona, re nka hore ha ho na lintho tse ling tse ka har'a sehlaha sa Realm ka har'a setšoantšo, customizationEntity, le cartComboProducts, kahoo ha ho na lilou tse ling tse behiloeng le ho li tlosa.

"Kapele" tharollo

Ntho ea pele eo re ileng ra etsa qeto ea ho e etsa ke ho hloekisa lintho tse hōlang ka potlako le ho hlahloba liphello ho bona hore na sena se tla rarolla bothata ba rona ba pele. Ntlha ea pele, tharollo e bonolo le e utloahalang ka ho fetisisa e entsoe, e leng: ntho e 'ngoe le e' ngoe e lokela ho ikarabella ho tlosa bana ba eona. Ho etsa sena, re hlahisitse segokanyimmediamentsi sa sebolokigolo se ileng sa khutlisa lethathamo la lintho tsa lona tsa Realm:

interface NestedEntityAware {
 fun getNestedEntities(): Collection<RealmObject?>
}

'Me re e sebelisitse linthong tsa rona tsa Realm:

@RealmClass
class DataPizzeriaEntity(
 @PrimaryKey
 var id: String? = null,
 var name: String? = null,
 var coordinates: CoordinatesEntity? = null,
 var deliverySchedule: ScheduleEntity? = null,
 var restaurantSchedule: ScheduleEntity? = null,
 ...
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       coordinates,
       deliverySchedule,
       restaurantSchedule
   )
 }
}

В getNestedEntities re khutlisetsa bana bohle e le lenane le bataletseng. 'Me ntho e' ngoe le e 'ngoe ea ngoana e ka boela ea kenya ts'ebetsong sebopeho sa NestedEntityAware, se bontšang hore e na le lintho tse ka hare tsa Realm tse lokelang ho tlosoa, mohlala. ScheduleEntity:

@RealmClass
class ScheduleEntity(
 var monday: DayOfWeekEntity? = null,
 var tuesday: DayOfWeekEntity? = null,
 var wednesday: DayOfWeekEntity? = null,
 var thursday: DayOfWeekEntity? = null,
 var friday: DayOfWeekEntity? = null,
 var saturday: DayOfWeekEntity? = null,
 var sunday: DayOfWeekEntity? = null
) : RealmObject(), NestedEntityAware {

 override fun getNestedEntities(): Collection<RealmObject?> {
   return listOf(
       monday, tuesday, wednesday, thursday, friday, saturday, sunday
   )
 }
}

'Me joalo-joalo, sehlaha sa lintho se ka phetoa.

Ka mor'a moo, re ngola mokhoa oo ka ho pheta-pheta o hlakolang lintho tsohle tse behiloeng. Mokhoa (o entsoe joalo ka katoloso) deleteAllNestedEntities e fumana lintho tsohle tsa boemo bo holimo le mokhoa deleteNestedRecursively Ka makhetlo-khetlo e tlosa lintho tsohle tse behiloeng ho sebelisa NestedEntityAware interface:

fun <T> Realm.deleteAllNestedEntities(entities: Collection<T>,
 entityClass: Class<out RealmObject>,
 idMapper: (T) -> String,
 idFieldName : String = "id"
 ) {

 val existedObjects = where(entityClass)
     .`in`(idFieldName, entities.map(idMapper).toTypedArray())
     .findAll()

 deleteNestedRecursively(existedObjects)
}

private fun Realm.deleteNestedRecursively(entities: Collection<RealmObject?>) {
 for(entity in entities) {
   entity?.let { realmObject ->
     if (realmObject is NestedEntityAware) {
       deleteNestedRecursively((realmObject as NestedEntityAware).getNestedEntities())
     }
     realmObject.deleteFromRealm()
   }
 }
}

Re entse sena ka lintho tse holang ka potlako mme ra hlahloba hore na ho etsahetse eng.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Ka lebaka leo, lintho tseo re ileng ra li koahela ka tharollo ena li ile tsa khaotsa ho hōla. 'Me kholo ea kakaretso ea setsi e ile ea fokotseha, empa ha ea ka ea emisa.

Tharollo "e tloaelehileng".

Le hoja setsi se ile sa qala ho hōla butle-butle, se ntse se hōla. Kahoo re ile ra qala ho sheba ho ea pele. Morero oa rona o sebelisa ka mafolofolo caching ea data ho Realm. Ka hona, ho ngola lintho tsohle tse behiloeng bakeng sa ntho e 'ngoe le e' ngoe ke mosebetsi o boima, 'me kotsi ea liphoso e eketseha, hobane u ka lebala ho hlalosa lintho ha u fetola khoutu.

Ke ne ke batla ho etsa bonnete ba hore ha ke sebelise li-interfaces, empa hore ntho e 'ngoe le e' ngoe e sebetsa ka boeona.

Ha re batla hore ntho e sebetse ka boyona, re tlameha ho sebelisa monahano. Ho etsa sena, re ka feta lebaleng le leng le le leng la sehlopha mme ra hlahloba hore na ke ntho ea Realm kapa lethathamo la lintho:

RealmModel::class.java.isAssignableFrom(field.type)

RealmList::class.java.isAssignableFrom(field.type)

Haeba tšimo e le RealmModel kapa RealmList, joale eketsa ntho ea sebaka sena lethathamong la lintho tse behiloeng. Ntho e 'ngoe le e' ngoe e tšoana hantle le eo re e entseng ka holimo, feela mona e tla etsoa ka boeona. Mokhoa oa ho hlakola cascade ka boeona o bonolo haholo mme o shebahala tjena:

fun <T : Any> Realm.cascadeDelete(entities: Collection<T?>) {
 if(entities.isEmpty()) {
   return
 }

 entities.filterNotNull().let { notNullEntities ->
   notNullEntities
       .filterRealmObject()
       .flatMap { realmObject -> getNestedRealmObjects(realmObject) }
       .also { realmObjects -> cascadeDelete(realmObjects) }

   notNullEntities
       .forEach { entity ->
         if((entity is RealmObject) && entity.isValid) {
           entity.deleteFromRealm()
         }
       }
 }
}

Katoloso filterRealmObject e sefa ebe e fetisa feela lintho tsa Realm. Mokhoa getNestedRealmObjects ka ho thuisa, e fumana lintho tsohle tse behiloeng sebakeng sa Realm ebe e li beha lethathamong la mela. Ebe re etsa ntho e tšoanang recursively. Ha o hlakola, o hloka ho hlahloba ntho hore na e nepahetse isValid, hobane ho ka etsahala hore lintho tse fapaneng tsa motsoali li ka ba le lihlaha tse tšoanang. Ho molemo ho qoba sena 'me u sebelise feela ho iketsetsa id ha u theha lintho tse ncha.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Ts'ebetsong e felletseng ea mokhoa oa GetNestedRealmObjects

private fun getNestedRealmObjects(realmObject: RealmObject) : List<RealmObject> {
 val nestedObjects = mutableListOf<RealmObject>()
 val fields = realmObject.javaClass.superclass.declaredFields

// Проверяем каждое поле, не является ли оно RealmModel или списком RealmList
 fields.forEach { field ->
   when {
     RealmModel::class.java.isAssignableFrom(field.type) -> {
       try {
         val child = getChildObjectByField(realmObject, field)
         child?.let {
           if (isInstanceOfRealmObject(it)) {
             nestedObjects.add(child as RealmObject)
           }
         }
       } catch (e: Exception) { ... }
     }

     RealmList::class.java.isAssignableFrom(field.type) -> {
       try {
         val childList = getChildObjectByField(realmObject, field)
         childList?.let { list ->
           (list as RealmList<*>).forEach {
             if (isInstanceOfRealmObject(it)) {
               nestedObjects.add(it as RealmObject)
             }
           }
         }
       } catch (e: Exception) { ... }
     }
   }
 }

 return nestedObjects
}

private fun getChildObjectByField(realmObject: RealmObject, field: Field): Any? {
 val methodName = "get${field.name.capitalize()}"
 val method = realmObject.javaClass.getMethod(methodName)
 return method.invoke(realmObject)
}

Ka lebaka leo, khoutu ea rona ea bareki re sebelisa "cascading delete" bakeng sa ts'ebetso e 'ngoe le e' ngoe ea phetoho ea data. Ka mohlala, bakeng sa ts'ebetso ea ho kenya e shebahala tjena:

override fun <T : Entity> insert(
 entityInformation: EntityInformation,
 entities: Collection<T>): Collection<T> = entities.apply {
 realmInstance.cascadeDelete(getManagedEntities(entityInformation, this))
 realmInstance.copyFromRealm(
     realmInstance
         .copyToRealmOrUpdate(this.map { entity -> entity as RealmModel }
 ))
}

Mokhoa oa pele getManagedEntities e amohela lintho tsohle tse ekelitsoeng, ebe mokhoa cascadeDelete E hlakola lintho tsohle tse bokeletsoeng khafetsa pele o ngola tse ncha. Re qetella re sebelisa mokhoa ona nakong eohle ea kopo. Ho lutla ha memori ho Realm ho felile ka botlalo. Ha re se re entse tekanyo e ts'oanang ea ho itšetleha ha nako ea ho qala ka palo ea ho qala ha serame sa kopo, re bona sephetho.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Mohala o motala o bonts'a ho its'etleha ha nako ea ho qala ts'ebeliso ho palo ea serame e qalang nakong ea ho hlakoloa ha lintho tse hahelletsoeng.

Liphetho le liqeto

Sebaka sa polokelo ea marang-rang se ntseng se hola sa Realm se ne se etsa hore sesebelisoa se qale butle haholo. Re lokolotse apdeite ka "cascading delete" ea rona ea lintho tse hlahisitsoeng. Joale re beha leihlo le ho lekola hore na qeto ea rona e amme nako ea ho qala kopo joang ka _app_start metric.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Bakeng sa tlhahlobo, re nka nako ea matsatsi a 90 mme re bona: nako ea ho qala ts'ebeliso, bobeli ba bohareng le e oelang ho karolo ea 95 ea basebelisi, e qalile ho fokotseha mme ha e sa hlola e phahama.

Pale ea hore na ho hlakoloa ha cascade ho Realm ho hapile joang ha ho phatlalatsoa nako e telele

Ha u sheba chate ea matsatsi a supileng, _app_start metric e shebahala e lekane ka botlalo 'me e ka tlase ho motsotsoana o le mong.

Ho bohlokoa hape ho kenyelletsa hore ka ho sa feleng, Firebase e romella litemoso haeba boleng ba median ba _app_start bo feta metsotsoana e 5. Leha ho le joalo, joalokaha re bona, ha ua lokela ho itšetleha ka sena, empa ho e-na le hoo, kena 'me u se hlahlobe ka ho hlaka.

Ntho e ikhethang ka database ea Realm ke hore ke polokelo ea litaba e sa amaneng le likamano. Leha e le bonolo ho e sebelisa, ho tšoana le tharollo ea ORM le khokahano ea ntho, ha e na ho hlakoloa ha cascade.

Haeba sena se sa tsotelloe, lintho tse behiloeng sehlaheng li tla bokellana 'me li "lutle". Database e tla hola khafetsa, e leng se tla ama ho fokotseha kapa ho qala ha sesebelisoa.

Ke arolelane boiphihlelo ba rona mabapi le mokhoa oa ho hlakola lintho ka potlako sebakeng sa Realm, tse seng li so tsoe ka lebokoseng, empa esale ho buisanoa ka tsona ka nako e telele. ba re и ba re. Tabeng ea rona, sena se potlakisitse haholo nako ea ho qala kopo.

Leha ho na le puisano e mabapi le ponahalo e haufi ea karolo ena, ho ba sieo ha cascade ho "Realm" ho etsoa ka moralo. Haeba u rala sesebelisoa se secha, nahana ka sena. 'Me haeba u se u ntse u sebelisa Realm, hlahloba hore na u na le mathata a joalo.

Source: www.habr.com

Eketsa ka tlhaloso