ืื ืืืืขืจื ื ืขืืขื ืฉื ืขื ืงืึทืืขืจ ืืื ืึธืคึผืจืืคืืง ืื ืืื ืจืืจืขืืืืืง ืึทืคึผืืึทืงืืืฉืึทื ื ืคึฟืึทืจ ืืขืืขืื. ืืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ื ืขืื ืึท ืืึทื ื ืฆืืึทื ืฆื ืงืึทืืขืจ, ืืขืจ ืืึทื ืืฆืขืจ ืืืืื ืฆื ืคืืื ืืจืืืขืจืืง ืืื ืืืื. ืืืจ ืงืขื ืขื ืืืืื ืฆืขืืึธืื ืื ืงืื ื ืืขืจืคืึทืจืื ื ืึธืืขืจ ืืึธืจ ืคืึทืจืืืจื ืืขื ืืึทื ืืฆืขืจ ืืคืืื ืืืืืขืจ ืขืจ ืกืืึทืจืฅ ื ืืฆื ืื ืึทืคึผืืึทืงืืืฉืึทื.
ืืืจ ืึทืืึธื ืืืกืงืึทืืืขืจื ืึทื ืื ืืึธืืึธ ืคึผืืฆืึท ืึทืคึผ ื ืขืื 3 ืกืขืงืื ืืขืก ืฆื ืงืึทืืขืจ ืืื ืืืจืืฉื ืืืืขื, ืืื ืคึฟืึทืจ ืขืืืขืืข "ืืึทืืืืืง ืึธื ืขืก" ืขืก ื ืขืื 15-20 ืกืขืงืื ืืขืก.
ืื ืืขืจ ืืขืจ ืฉื ืืึทืื ืืื ืึท ืืขืฉืืืืข ืืื ืึท ืืืืงืืขื ืกืึธืฃ: ืืืขืื ืืขื ืืืึผืงืก ืคืื ืื ืจืขืึทืื ืืึทืืึทืืืืก, ืึท ืืึผืจืื ืจืื ืขื, ืืื ืืืจ ืึทืงืืืืืึทืืืืืื ื ืขืกืืขื ืึทืืืืฉืขืงืฅ, ืืื ืืขืืึธืื ืคึผืืื ืืื ืฆืืืึทืืขื ืืื ืคืึทืจืคืขืกืืืงื ืึทืืฅ.

ืืืืจ ืคืื ืืขื ืึทืจืืืงื: - ืึทื ืืจืืื ืืขืืืขืืึธืคึผืขืจ ืืื ืืึธืืึธ ืคึผืืฆืึท.
ืืจืื ืกืขืงืื ืืขืก ืคืื ืืขืื ืึท ืงืืืง ืืืืฃ ืื ืึทืคึผืืึทืงืืืฉืึทื ืืืงืึทื ืฆื ืืืืฃ ืจืขืกืืืข () ืคืื ืืขืจ ืขืจืฉืืขืจ ืืขืืืงืืื ืืื ืืืขื ืืืงืืึทื. ืืื ืคึฟืึทืจ ืขืืืขืืข ืืืืขืจื, ืื ืกืืึทืจืืึทืคึผ ืฆืืื ืจืืืฉื 15-20 ืกืขืงืื ืืขืก. ืืื ืืื ืืึธืก ืืคืืื ืืขืืืขื?
ื ืืืืขืจ ืงืืจืฅ ืงืืฆืขืจ ืคึฟืึทืจ ืื ืืืืก ืืึธื ื ืื ืืึธืื ืฆืืื ืฆื ืืืืขื ืขื
ืืื ืืืขืจ ืจืขืึทืื ืืึทืืึทืืืืก ืืขืืืืงืกื ืขื ืืืึทืกืื. ืขืืืขืืข ื ืขืกืืขื ืึทืืืืฉืขืงืฅ ืืขื ืขื ื ืืฉื ืืืืกืืขืืขืงื, ืึธืืขืจ ืืขื ืขื ืงืขืกืืืืขืจ ืึทืงืืืืืึทืืืืืื. ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืืึทืคึผ ืฆืืื ืืื ืืืกืืขืืืืืึทื ืืขืืืืงืกื. ืืขืจื ืึธื ืืืจ ืคืึทืจืคืขืกืืืงื ืขืก, ืืื ืื ืกืืึทืจืืึทืคึผ ืฆืืื ืืขืงืืืขื ืฆื ืื ืฆืื - ืขืก ืืื ืืขืืืขื ืืืืื ืืงืขืจ ืืื 1 ืจืืข ืืื ื ืื ืืขืจ ืืขืืืืงืกื. ืืขืจ ืึทืจืืืงื ืึผืืื ืึทื ืึทื ืึทืืืกืืก ืคืื ืื ืกืืืืึทืฆืืข ืืื ืฆืืืื ืกืึทืืืฉืึทื ื - ืึท ืฉื ืขื ืืื ืึท ื ืึธืจืืึทื.
ืืืื ืืื ืึทื ืึทืืืกืืก ืคืื ืื ืคึผืจืึธืืืขื
ืืืึทื ื, ืงืืื ืจืืจืขืืืืืง ืึทืคึผืืึทืงืืืฉืึทื ืืืื ืึธื ืืืืื ืืขืฉืืืื ื ืืื ืืืื ืึธืคึผืจืืคืืง. ืึธืืขืจ ืขืก ืืื ื ืืฉื ื ืึธืจ ืืืขืื ืื ืจืืจืขืืืืืง ืึทืคึผ. ืืึทื ืืฆืขืจ ืืขืจืคืึทืจืื ื ืคืื ืื ืืขืจืึทืงืฉืึทื ืืื ืึท ืืื ืกื ืืื ืึท ืคืืจืืข ืืื ืึท ืงืึธืืคึผืืขืงืก ืืึทื. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืืื ืืื ืืืขืจ ืคืึทื, ืขืงืกืคึผืจืขืก ืืืืงืืึทื ืืื ืืืื ืขืจ ืคืื ืื ืฉืืืกื ืื ืืืงืึทืืึธืจืก ืคึฟืึทืจ ืคึผืืฆืึท ืืื ืกื. ืืืื ืื ืขืงืกืคึผืจืขืก ืืื ืฉื ืขื, ืื ืคึผืืฆืข ืืืขื ืืืื ืืืืก, ืืื ืืขืจ ืงืื ื ืืืืก ืืืื ืฆื ืขืกื ืืืฆื ืืืขื ื ืืฉื ืืึธืื ืฆื ืืืึทืจืื ืืึทื ื. ืคึฟืึทืจ ืื ืึทืคึผืืึทืงืืืฉืึทื, ืืื ืงืขืจ, ืขืก ืืื ืืืืืืืง ืฆื ืืึทืื ืึท ืืขืคืื ืคืื ืฉื ืขื ืืื ืกื, ืืืืึทื ืืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ื ืขืื ืืืืื 20 ืกืขืงืื ืืขืก ืฆื ืงืึทืืขืจ, ืืื ืืึทื ื ืืืขื ืืืจ ืืึธืื ืฆื ืืืึทืจืื ืคึฟืึทืจ ืื ืคึผืืฆืึท?
ืืื ืขืจืฉืืขืจ, ืืืจ ืืื ืืขื ืขื ืคืืืกื ืืื ืื ืคืึทืงื ืึทื ืืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืขื ืืืขื ืึท ืคึผืึธืจ ืคืื ืกืขืงืื ืืขืก ืฆื ืงืึทืืขืจ, ืืื ืืขืืึธืื ืืืจ ืื ืืขืืืืื ืฆื ืืขืจื ืืขื ืืช ืคืื ืื ืืขืจืข ืืืจืื ืืืขืื ืืื ืืึทื ื ืขืก ืืขื ืืืขื. ืืืข ืจ ืื ืจ ืืื ื ื ืืฉ ื ืืขืงืขื ื ืืืืขืจืืืจ ื ืืข ื ืืฆื .
ืืื ืืึทื ื ืืื ืขืก? ืืืื ืืืื ืึท ืงืึทืื ืึธื ืืืื ืคืื ืึท ืึทืคึผืืึทืงืืืฉืึทื ื ืขืื ืืืืื ืืงืขืจ ืืื 5 ืกืขืงืื ืืขืก, ืืึธืก ืืื ืืขืืืืื "ืืื ื ืึธืจืืึทื". Dodo Pizza Android ืึทืคึผ ืืื ืืึธื ืืฉื (ืืืื Firebase ืืขืืจืืงืก ) ืืื ืืื ืืืจืืฉื ืืืืขื ืืื 3 ืกืขืงืื ืืขืก - "ื ืื ืืจืืืก, ื ืื ืฉืจืขืงืืขื," ืืื ืืื ืืึธืื.
ืืืขืจ ืืขืืึธืื ืงืืืืื ืื ืืขืืืืื ืฆื ืืขืจืฉืืึทื ืขื ืึทื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืขื ืืืขื ืึท ืืืืขืจ, ืืืืขืจ, ืืืืขืจ ืืึทื ื ืฆืืึทื ืฆื ืงืึทืืขืจ! ืฆื ืึธื ืืืืื ืืื, ืืืจ ืืึทืฉืืึธืกื ืฆื ืืขืกืื ืืืึธืก ืืื "ืืืืขืจ, ืืืืขืจ, ืืืืขืจ ืืึทื ื". ืืื ืืืจ ืืขืืืืื ื Firebase ืฉืคึผืืจ ืคึฟืึทืจ ืืขื .

ืืขืจ ื ืึธืจืืึทื ืฉืคึผืืจ ืืขืกืื ืื ืฆืืื ืฆืืืืฉื ืืขื ืืึธืืขื ื ืืืขื ืืขืจ ืืึทื ืืฆืขืจ ืขืคึฟื ื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืขื ืืึธืืขื ื ืืืขื ืื onResume () ืคืื ืืขืจ ืขืจืฉืืขืจ ืืขืืืงืืื ืืื ืขืงืกืึทืงืืืืึทื. ืืื ืื Firebase ืงืึทื ืกืึธืื, ืืขื ืืขืืจืืง ืืื ืืขืจืืคื _app_start. ืขืก ืืึธื ืืื ืึทืจืืืกืืขืืืืื ืึทื:
- ืกืืึทืจืืึทืคึผ ืฆืืื ืคึฟืึทืจ ืืืืขืจื ืืขืืขืจ ืื 95 ืคึผืขืจืกืขื ืืื ืืขื ืขื ืงืืืึทื 20 ืกืขืงืื ืืขืก (ืขืืืขืืข ืืคืืื ืืขืจ), ืืจืึธืฅ ืื ืืืจืืฉื ืืืืขื ืงืึทืื ืกืืึทืจืืึทืคึผ ืฆืืื ืืื ืืืืื ืืงืขืจ ืืื 5 ืกืขืงืื ืืขืก.
- ืื ืกืืึทืจืืึทืคึผ ืฆืืื ืืื ื ืืฉื ืึท ืงืขืกืืืืขืจืืืง ืืืขืจื, ืึธืืขืจ ืืืืงืกื ืืืืขืจ ืฆืืึทื. ืืืขืจ ืืื ืขืก ืืขื ืขื ืืจืืคื ืก. ืืืจ ืืขืคึฟืื ืขื ืืขื ืืืกืืขืจ ืืืขื ืืืจ ืืขืืืืงืกื ืื ืืืึธื ืคืื ืึทื ืึทืืืกืืก ืฆื 90 ืืขื.

ืฆืืืื ืืขืืื ืงืขื ืืขื ืขื ืืขืงืืืขื ืฆื ืืืื ืื ื:
- ืขืคึผืขืก ืืืง.
- ืืขื "ืขืคึผืขืก" ืืื ืืึทืฉืืขืืืง ื ืึธื ืืขืืืื ื ืืื ืืขืืึธืื ืืืงืก ืืืืืขืจ.
"ืืืกืืึธืืข ืขืคึผืขืก ืืื ืื ืืึทืืึทืืึทืกืข," ืืืจ ืืขืืึทื ืง, ืืื ืืืจ ืืึธืื ืจืขืื. ืขืจืฉืืขืจ, ืืืจ ื ืืฆื ืื ืืึทืืึทืืืืก ืืื ืึท ืงืึทืฉ ืืขืฉืึทืก ืืืืจืึทืืืึธื, ืืืจ ืืืกืืขืงื ืขืก. ืฆืืืืืื ืก, ืื ืืึทืืึทืืืืก ืืื ืืึธืืืื ืืืขื ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืฅ. ืึทืืฅ ืคึผืึทืกื ืฆืืืึทืืขื.
ืืืึธืก ืืื ืคืึทืืฉ ืืื ืื ืจืขืึทืื ืืึทืืึทืืืืก
ืืืจ ืื ืืขืืืืื ืฆื ืงืึธื ืืจืึธืืืจื ืืื ืื ืืื ืืึทืื ืคืื ืื ืืึทืืึทืืืืก ืขื ืืขืจืื ืืขื ืืืืขืจ ืื ืืขืื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื, ืคึฟืื ืืขืจ ืขืจืฉืืขืจ ืื ืกืืึทืืืจืื ื ืืื ืืืืึทืืขืจ ืืขืฉืึทืก ืึทืงืืืื ื ืืฆื. ืืืจ ืงืขื ื ืืขื ืื ืืื ืืึทืื ืคืื ืื ืจืขืึทืื ืืึทืืึทืืืืก ืืืจื ืึธืืขืจ ืืื ืืขืจ ืืขืืึทื ืืื ืงืืืจ ืืืจื ืขืคื ืื ืืขืงืข ืืืจื . ืฆื ืืขื ืื ืืื ืืึทืื ืคืื ืื ืืึทืืึทืืืืก ืืืจื ADB, ื ืึธืืืึทืื ืื ืจืขืึทืื ืืึทืืึทืืืืก ืืขืงืข:
adb exec-out run-as ${PACKAGE_NAME} cat files/${DB_NAME}ืืขืงืืงื ืืืืฃ ืื ืืื ืืึทืื ืคืื ืื ืืึทืืึทืืืืก ืืื ืคืึทืจืฉืืืขื ืข ืฆืืื, ืืืจ ืืขืคึฟืื ืขื ืึทื ืื ื ืืืขืจ ืคืื ืึทืืืืฉืขืงืฅ ืคืื ืึท ืืืืขืจ ืืืคึผ ืืื ืงืขืกืืืืขืจ ืื ืงืจืืกืื ื.

ืื ืืืื ืืืืืื ืึท ืคืจืึทืืืขื ื ืคืื ืจืขืึทืื ืกืืืืืึธ ืคึฟืึทืจ ืฆืืืื ืืขืงืขืก: ืืืืฃ ืื ืืื ืงืก - ืื ืึทืคึผืืึทืงืืืฉืึทื ืืึทืืข ืขืืืขืืข ืืึธื ื ืึธื ืื ืกืืึทืืืจืื ื, ืืืืฃ ืื ืจืขืื - ื ืึธื ืึทืงืืืื ื ืืฆื. ืขืก ืงืขื ืขื ืืืื ืืขืืขื ืึทื ืื ื ืืืขืจ ืคืื ืึทืืืืฉืขืงืก ImageEntity ะธ MoneyType ืืื ืืืืืืืืง ืืขืืืืงืกื (ืื ืกืงืจืขืขื ืฉืึธื ืืืืืื ืื ื ืืืขืจ ืคืื ืึทืืืืฉืขืงืฅ ืคืื ืืขืืขืจ ืืืคึผ).
ืฉืืืืืช ืฆืืืืฉื ืืึทืืึทืืืืก ืืืึผืงืก ืืื ืกืืึทืจืืึทืคึผ ืฆืืื
ืึทื ืงืึทื ืืจืึธืืื ืืึทืืึทืืืืก ืืจืึธืื ืืื ืืืืขืจ ืฉืืขืื. ืึธืืขืจ ืืื ืงืขื ืืึธืก ืืืืจืงื ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืืึทืคึผ ืฆืืื? ืขืก ืืื ืืึทื ืฅ ืืจืื ื ืฆื ืืขืกืื ืืขื ืืืจื ืื ืึทืงืืืืืืื ืืึทื ืึทืืขืจ. ืืื ื ืึทื ืืจืืื 4.4, ืืึธืืงืึทื ืืืกืคึผืืืื ืื ืงืืึธืฅ ืืื ืื ืฉืืจืืงื ืืขืืืืื ืืื ืื ืฆืืื. ืื ืฆืืื ืืื ืืืืึทื ืฆื ืื ืืขืืึทืืขื ืคึฟืื ืืขื ืืึธืืขื ื ืื ืึทืคึผืืึทืงืืืฉืึทื ืืื ืืึธื ืืฉื ืืื ืืขื ืกืืฃ ืคืื ืื ืจืขื ืืขืจืื ื ืคืื ืื ืืขืืืงืืื. ืืขืฉืึทืก ืืขื ืืึธื ืื ืคืืืืขื ืืข ืืขืฉืขืขื ืืฉื ืคึผืึทืกืืจื:
- ืึธื ืืืืื ืืขื ืคึผืจืึธืฆืขืก.
- ืื ืืืืึทืืืืึทืืืึธื ืคืื ืึทืืืืฉืขืงืฅ.
- ืฉืึทืคืื ื ืืื ืื ืืืืึทืืืืืืฉืึทื ืคืื ืึทืงืืืืืืืขืื.
- ืฉืืคื ืึท ืืืืกืืืื.
- ืึทืคึผืคึผืืืงืึทืืืึธื ืจืขื ืืขืจืื ื.
ืกืืฅ ืืื ืื. ืืืื ืืืจ ืืืืคื ADB ืืื ืื -S ืืื -W ืคืืึทืืก, ืืืจ ืงืขื ืขื ืืึทืงืืืขื ืขืงืกืืขื ืืขื ืจืขืืืืืึทื ืืื ืื ืกืืึทืจืืึทืคึผ ืฆืืื:
adb shell am start -S -W ru.dodopizza.app/.MainActivity -c android.intent.category.LAUNCHER -a android.intent.action.MAIN ืืืื ืืืจ ืืึทืคึผื ืขืก ืคืื ืืึธืจื grep -i WaitTime ืฆืืื, ืืืจ ืงืขื ืขื ืึธืืึทืืืื ืื ืืึทืืืื ื ืคืื ืืขื ืืขืืจืืง ืืื ืืืืืฉืืืึทืื ืงืืง ืืื ืื ืจืขืืืืืึทืื. ืื ืืจืึทืคืืง ืืื ืื ืืืืืื ืื ืึธืคืขื ืืืงืืึทื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืืึทืคึผ ืฆืืื ืืืืฃ ืื ื ืืืขืจ ืคืื ืงืึทืื ืกืืึทืจืฅ ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื.

ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืขืก ืืื ืืขืืืขื ืื ืืขืืืข ื ืึทืืืจ ืคืื ืื ืฉืืืืืช ืฆืืืืฉื ืื ืืจืืืก ืืื ืืืึผืงืก ืคืื ืื ืืึทืืึทืืืืก, ืืืึธืก ืืื ืืขืืืืงืกื ืคืื 4 ืื ืฆื 15 ืื. ืืื ืืึทื ืฅ, ืขืก ืืืจื ืก ืืืืก ืึทื ืืื ืื ืฆืืื (ืืื ืืขื ืืืึผืงืก ืคืื ืงืึทืื ืกืืึทืจืฅ), ืืืืืข ืื ืึทืคึผืืึทืงืืืฉืึทื ืงืึทืืขืจ ืฆืืื ืืื ืื ืืจืืืก ืคืื ืื ืืึทืืึทืืืืก ืืขืืืืงืกื. ืืืจ ืืึธืื ืึท ืืืืคึผืึทืืึทืกืึทืก ืืืืฃ ืืื ืืืขืจ ืืขื ื. ืืืฆ ื ืื ื ื ื ืจ ืืขืืืื ื ืฆ ื ืืืฉืืขืืืง ื ื ื ืืคืืขื ืืืงืฒื . ืืขืจืืืขืจ, ืืืจ ืืึทืฉืืึธืกื ืฆื ืืึทืืืึทืืืงื ืื "ืืืงืก" ืืื ืืขื ืืืื ืืึธืก ืืืึธืื ืคืึทืจืืืืขืจื ืื ืงืึทืืขืจ.
ืกืืืืช ืคึฟืึทืจ ืกืึธืฃ ืืึทืืึทืืืืก ืืืึผืงืก
ืืืืืขืจ ืจืืืืืืื ื "ืืืงืก", ืขืก ืืื ืืืขืจื ืคืืจืฉืืื ื ืืืึธืก ืืื ืืจืืืก ืืื ืืขืจ ืขืจืฉืืขืจ ืึธืจื. ืฆื ืืึธื ืืึธืก, ืืึธืื ืืื ืื ืืขืืขื ืงืขื ืืืึธืก ืจืขืึทืื ืืื.
ืจืขืึทืื ืืื ืึท ื ืื-ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืก. ืขืก ืึทืืึทืื ืืืจ ืฆื ืืึทืฉืจืืึทืื ืืืฆืืื ืืขื ืฆืืืืฉื ืึทืืืืฉืขืงืฅ ืืื ืึท ืขื ืืขื ืืืขื ืฆื ืืื ืคืืืข ORM ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืกืื ืืืืฃ ืึทื ืืจืืื ืืขื ืขื ืืืกืงืจืืืื. ืืื ืืขืจ ืืขืืืืงืขืจ ืฆืืื, ืจืขืึทืื ืกืืึธืจื ืึทืืืืฉืขืงืฅ ืืืืื ืืื ืืึผืจืื ืืื ืื ืืื ืืกืืขืจ ืกืืืข ืคืื โโโโืืจืึทื ืกืคืึธืจืืืืฉืึทื ื ืืื ืืึทืคึผืื ืื. ืืึธืก ืึทืืึทืื ืืืจ ืฆื ืืืืขื ืขื ืืึทืื ืคืื ืื ืืืกืง ืืืืขืจ ืืขืฉืืืื ื, ืืืึธืก ืืื ืื ืฉืืึทืจืงืืื ืคืื ืจืขืึทืื ืืื ืืืึธืก ืขืก ืืื ืืื ืืขืืื.
(ืคึฟืึทืจ ืื ืฆืืืขืงื ืคืื ืืขื ืึทืจืืืงื, ืื ืืึทืฉืจืืึทืืื ื ืืืขื ืืืื ืืขื ืื ืคึฟืึทืจ ืืื ืื. ืืืจ ืงืขื ืขื ืืืืขื ืขื ืืขืจ ืืืขืื ืจืขืึทืื ืืื ืื ืงืื ืึธืืขืจ ืืื ืืืืขืจ ).
ืคืืืข ืืขืืืขืืึธืคึผืขืจืก ืืขื ืขื ืฆืืืขืืืืื ื ืฆื ืึทืจืืขืื ืืขืจ ืืื ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืกืื (ืืืฉื, ORM ืืึทืืึทืืืืกืื ืืื SQL ืืื ืืขืจ ืื ืงืึทืคึผืืขืจ). ืืื ืืื ืื ืืื ืงืึทืกืงืืืืื ื ืืึทืื ืืืืืฉืึทื ืึธืคื ืืืกืงืืืขื ืืื ืึท ืืขืืขืื. ืึธืืขืจ ื ืืฉื ืืื ืืขืจ ืืืขืื.
ืืืจื ืืขื ืืืขื, ืื ืงืึทืกืงืืื ืืืืืฉืึทื ืฉืืจืื ืืื ืืขืืขืื ืคึฟืึทืจ ืึท ืืึทื ื ืฆืืึทื. ืืืก ะธ , ืคึฟืึทืจืืื ืื ืืื ืืื, ืืื ืึทืงืืืืืื ืืืกืงืึทืกื. ืกืณืืื ืืขืืื ื ืืขืคืื, ืื ืืณืฐืขื ืืืื ืืขืฉืขื. ืืืขืจ ืืขืืึธืื ืึทืืฅ ืืืืขืจืืขืืขืฆื ืืื ืื ืืงืืื ืคืื ืฉืืึทืจืง ืืื ืฉืืืึทื ืืื ืงืก, ืืืึธืก ืืืึธืื ืืืื ืืืืืึธืืึทืืืฉ ืกืึธืืืืข ืืขื ืคึผืจืึธืืืขื. ืืื ืืขืืืขื ืืึทื ืฅ ืืขืืขืืืง ืืื ืึทืงืืืื ืืืืฃ ืืขื ืึทืจืืขื , ืฐืขืืืข ืจ ืื ื ืืืฆ ื ืืคืืขืฉืืขืื ืืขืฐืืจ ื ืฆืืื ื ืืื ืขืจืืขืืข ืฉืฐืขืจืืงืฒืื .
ืืึทืืึท ืจืื ืขื ืึธื ืงืึทืกืงืืืืื ื ืืืืืฉืึทื
ืืื ืคึผืื ืงื ืจืื ืขื ืืึทืื ืืืื ืืืจ ืคืึทืจืืึธืื ืืื ืึท ื ืื-ืขืืืืกืืึทื ื ืงืึทืกืงืืืืื ื ืืืกืืขืงื? ืืืื ืืืจ ืืึธืื ื ืขืกืืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ, ืืื ืืืื ืืืื ืืืืกืืขืืขืงื.
ืืึธืืืจ ืงืืงื ืืืืฃ ืึท (ืึผืืขื) ืคืึทืงืืืฉ ืืืืฉืคึผืื. ืืืจ ืืึธืื ืึท ืืืืคืขืฅ 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() ืืขืจ ืคึผืจืึธืืืงื ืืื ืื ืืืึธืื ืืื ืคืึทืจืฉืืืขื ืข ืคืขืืืขืจ, ืึทืจืืึทื ืืขืจืขืื ื ืึท ืืืื ImageEntity, ืงืึทืกืืึทืืืืื ืื ืืจืืืืึทื ืฅ CustomizationEntity. ืืืื, ืื ืคึผืจืึธืืืงื ืืื ืื ืืืึธืื ืงืขื ืขื ืืืื ืึท ืงืึธืืืึธ ืืื ืืืื ืืืืืขื ืข ืืึทื ื ืคืื ืคึผืจืึธืืืงืื RealmList (CartProductEntity). ืึทืืข ืืืกืืขื ืคืขืืืขืจ ืืขื ืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ. ืืืื ืืืจ ืึทืจืืึทื ืืืืื ืึท ื ืืึทืข ืืืืคืขืฅ (copyToRealm () / copyToRealmOrUpdate ()) ืืื ืืขืจ ืืขืืืืงืขืจ ืฉืืึทื, ืืขื ืืืืคืขืฅ ืืืขื ืืืื ืืึธืจ ืึธืืืืขืจืจืืืึทื. ืึธืืขืจ ืึทืืข ืื ืขืจืืขื ืึทืืืืฉืขืงืฅ (ืืืื, ืงืืกืืึธืืืืึทืืืึธื ืขื ืืืื ืืื ืงืึทืจืืงืึธืืืึธืคึผืจืึธืืืงืฅ) ืืืขื ืคืึทืจืืืจื ืงืฉืจ ืืื ืื ืคืึธืืขืจ ืืื ืืืืืื ืืื ืื ืืึทืืึทืืืืก.
ืืื ื ืื ืคึฟืึทืจืืื ืืื ื ืืื ืืื ืืื ืคืึทืจืคืึทืื, ืืืจ ื ืื ืืขืจ ืืืืขื ืขื ืืื ืึธืืขืจ ืืืกืืขืงื ืืื (ืกืืึทืื ืืืจ ืืคืืจืืฉ ืึทืงืกืขืก ืืื ืึธืืขืจ ืืืกืืขืงื ืื ืืื ืฆืข "ืืืฉ"). ืืืจ ืืขืจืืคื ืืขื "ืืืงืึธืจื ืืืงืก".
ืืืขื ืืืจ ืึทืจืืขืื ืืื Realm, ืืืจ ืืืื ืืคืืจืืฉ ืืืจืืืืื ืึทืืข ืื ืขืืขืืขื ืื ืืื ืืคืืจืืฉ ืืืืกืืขืงื ืึทืืฅ ืืืืืขืจ ืึทืืึท ืึทืคึผืขืจืืืฉืึทื ื. ืืึธืก ืงืขื ืืืื ืืขืืื, ืืืฉื, ืืื ืืึธืก:
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()
}
// ะธ ะฟะพัะพะผ ัะถะต ัะพั
ัะฐะฝัะตะผืืืื ืืืจ ืืึธื ืืึธืก, ืึทืืฅ ืืืขื ืึทืจืืขืื ืืื ืขืก ืืึธื. ืืื ืืขื ืืืึทืฉืคึผืื, ืืืจ ืืืขืจื ืขืืขื ืึทื ืขืก ืืขื ืขื ืงืืื ืื ืืขืจืข ื ืขืกืืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ ืืื ืืืื, ืงืืกืืึธืืืืึทืืืึธื ืขื ืืืื ืืื ืงืึทืจืืงืึธืืืึธืคึผืจืึธืืืงืฅ, ืึทืืื ืขืก ืืขื ืขื ืงืืื ืื ืืขืจืข ื ืขืกืืขื ืืืคึผืก ืืื ืืืืืฅ.
ืฉื ืขื ืืืืืื ื
ืืขืจ ืขืจืฉืืขืจ ืืึทื ืืืึธืก ืืืจ ืืึทืฉืืึธืกื ืฆื ืืึธื ืืื ืฆื ืจืืื ืึทืจืืืฃ ืื ืคืึทืกืืึทืกื ืืจืึธืืื ื ืึทืืืืฉืขืงืฅ ืืื ืงืึธื ืืจืึธืืืจื ืื ืจืขืืืืืึทืื ืฆื ืืขื ืืืื ืืึธืก ืืืึธืื ืกืึธืืืืข ืืื ืืืขืจ ืึธืจืืืื ืขื ืคึผืจืึธืืืขื. ืขืจืฉืืขืจ, ืื ืกืืืคึผืืึทืกื ืืื ืืขืจืกื ืื ืืืึทืืืื ืืืืืื ื ืืื ืืขืืืื, ื ืืืืื: ืืขืืขืจ ืืืืคืขืฅ ืืึธื ืืืื ืคืึทืจืึทื ืืืืึธืจืืืขื ืคึฟืึทืจ ืจืืืืืืื ื ืืืึทื ืงืื ืืขืจ. ืฆื ืืึธื ืืึธืก, ืืืจ ืืึทืงืขื ืขื ืึท ืฆืืืื ื ืืืึธืก ืืึธื ืืืืืขืงืขืจื ืึท ืจืฉืืื ืคืื ืืืึทื ื ืขืกืืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ:
interface NestedEntityAware {
fun getNestedEntities(): Collection<RealmObject?>
}ืืื ืืืจ ืืืคึผืืึทืืขื ืึทื ืขืก ืืื ืืื ืืืขืจ ืจืขืึทืื ืึทืืืืฉืขืงืฅ:
@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 ืืืจ ืฆืืจืืงืงืืืขื ืึทืืข ืงืื ืืขืจ ืืื ืึท ืคืืึทื ืจืฉืืื. ืืื ืืขืืขืจ ืงืื ื ืึทืืืืฉืขืงื ืงืขื ืขื ืืืื ืื ืกืืจืืืขื ื ืื NestedEntityAware ืฆืืืื ื, ืืืึธืก ืื ืืืงืืืฅ ืึทื ืขืก ืืื ืื ืขืจืืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ ืฆื ืืืกืืขืงื, ืืืฉื 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
)
}
}ืืื ืึทืืื ืืืืฃ, ืื ื ืขืกืืื ื ืคืื ืึทืืืืฉืขืงืฅ ืงืขื ืขื ืืืื ืจืืคึผืืืื.
ืืขืจื ืึธื ืืืจ ืฉืจืืึทืื ืึท ืืืคึฟื ืึทื ืจืขืงืืจืกืืืืื ืืืืืฅ ืึทืืข ื ืขืกืืขื ืึทืืืืฉืขืงืฅ. ืืืคึฟื (ืืขืืืื ืืื ืึท ืคืึทืจืืขื ืืขืจืื ื) deleteAllNestedEntities ืืขืฅ ืึทืืข ืฉืคึผืืฅ-ืืืจืื ืึทืืืืฉืขืงืฅ ืืื ืืขืืืึธืืก deleteNestedRecursively ืจืืงืืจืกืืื ืจืืืืืื ืึทืืข ื ืขืกืืขื ืึทืืืืฉืขืงืฅ ื ืืฆื ืื NestedEntityAware ืฆืืืื ื:
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()
}
}
}ืืืจ ืืืื ืืึธืก ืืื ืื ืคืึทืกืืึทืกื ืืจืึธืืื ื ืึทืืืืฉืขืงืก ืืื ืึธืคึผืืขืฉืืขืื ืืืึธืก ืืขืืจืืคื.

ืืื ืึท ืจืขืืืืืึทื, ืื ืึทืืืืฉืขืงืฅ ืืืึธืก ืืืจ ืืืืขืงื ืืื ืืขื ืืืืืื ื ืคืืจืฉืืืคื ืืจืึธืืื ื. ืืื ืื ืงืืืืขืืืืง ืืืึผืงืก ืคืื ืื ืืึทืืข ืกืืึธืื, ืึธืืขืจ ืืื ื ืืฉื ืืึทืืื.
ืื "ื ืึธืจืืึทื" ืืืืืื ื
ืืึธืืฉ ืื ืืึทืืข ืื ืืขืืืืื ืฆื ืืืึทืงืกื ืกืืึธืืื, ืขืก ื ืึธื ืืขืืืืงืกื. ืึทืืื ืืืจ ืื ืืขืืืืื ืงืืงื ืืืืึทืืขืจ. ืืื ืืืขืจ ืคึผืจืืืขืงื ืืืื ืืืืขืจ ืึทืงืืืื ื ืืฆื ืคืื ืืึทืื ืงืึทืืฉืื ื ืืื ืจืขืึทืื. ืืขืจืืืขืจ, ืฉืจืืืื ืึทืืข ื ืขืกืืขื ืึทืืืืฉืขืงืฅ ืคึฟืึทืจ ืืขืืขืจ ืืืืคืขืฅ ืืื ืึทืจืืขื-ืืื ืืขื ืกืืืืข, ืคึผืืืก ืื ืจืืืืงืืจื ืคืื ืขืจืจืึธืจืก ืื ืงืจืืกืื, ืืืืึทื ืืืจ ืงืขื ืขื ืคืึทืจืืขืกื ืฆื ืกืคึผืขืฆืืคืืฆืืจื ืึทืืืืฉืขืงืฅ ืืืขื ืืฉืึทื ืืื ื ืื ืงืึธื.
ืืื ืืขืืืืื ืฆื ืืึทืื ืืืืขืจ ืึทื ืืื ืืึธื ื ืื ื ืืฆื ืื ืืขืจืคืืืกืื, ืึธืืขืจ ืึทื ืึทืืฅ ืืขืืจืืขื ืืืืฃ ืืื.
ืืืขื ืืืจ ืืืืื ืขืคึผืขืก ืฆื ืึทืจืืขืื ืืืืฃ ืืื, ืืืจ ืืึธืื ืฆื ื ืืฆื ืึธืคึผืฉืคึผืืืืื ื. ืฆื ืืึธื ืืึธืก, ืืืจ ืงืขื ืขื ืืืื ืืืจื ืืขืืขืจ ืงืืึทืก ืคืขืื ืืื ืงืึธื ืืจืึธืืืจื ืฆื ืขืก ืืื ืึท ืจืขืึทืื ืืืืคืขืฅ ืึธืืขืจ ืึท ืจืฉืืื ืคืื ืึทืืืืฉืขืงืฅ:
RealmModel::class.java.isAssignableFrom(field.type)
RealmList::class.java.isAssignableFrom(field.type)ืืืื ืื ืคืขืื ืืื ืึท ืจืขืึทืืืืึธืืขื ืึธืืขืจ ืจืขืึทืืืืืกื, ืืืื ืื ืืืืคืขืฅ ืคืื ืืขื ืคืขืื ืฆื ืึท ืจืฉืืื ืคืื ื ืขืกืืขื ืึทืืืืฉืขืงืฅ. ืึทืืฅ ืืื ืคึผืื ืงื ืื ืืขืืืข ืืื ืืืจ ืืืื ืืืืื, ื ืึธืจ ืืึธ ืืืขื ืขืก ืืืขืจื ืืขืืื ืคืื ืืื. ืื ืงืึทืกืงืืื ืืืืืฉืึทื ืืืคึฟื ืืื ืืื ืืืืขืจ ืคึผืฉืื ืืื ืงืืงื ืืื ืืึธืก:
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()
}
}
}
}
ืคืึทืจืืขื ืืขืจืื ื filterRealmObject ืคืืืืขืจืก ืืืืก ืืื ืคึผืึทืกืื ืืืืื ืจืขืึทืื ืึทืืืืฉืขืงืฅ. ืืขืืึธื getNestedRealmObjects ืืืจื ืึธืคึผืฉืคึผืืืืื ื, ืขืก ืืขืคืื ื ืึทืืข ื ืขืกืืขื ืจืขืึทืื ืึทืืืืฉืขืงืฅ ืืื ืฉืืขืื ืืื ืืื ืึท ืืื ืขืึทืจ ืจืฉืืื. ืืขืจื ืึธื ืืืจ ืืึธื ืื ืืขืืืข ืืึทื ืจืขืงืืจืกืืืืขืื. ืืืขื ืืืืืืื ื, ืืืจ ืืึทืจืคึฟื ืฆื ืงืึธื ืืจืึธืืืจื ืื ืืืืคืขืฅ ืคึฟืึทืจ ืืืืืืงืืึทื isValid, ืืืืึทื ืขืก ืงืขื ืืืื ืึทื ืคืึทืจืฉืืืขื ืข ืคืึธืืขืจ ืึทืืืืฉืขืงืฅ ืงืขื ืขื ืืึธืื ื ืขืกืืขื ืืืืขื ืืงืึทื ืึธื ืขืก. ืขืก ืืื ืืขืกืขืจ ืฆื ืืืกืืืืื ืืขื ืืื ืคืฉืื ื ืืฆื ืึทืืืึธ-ืืืจ ืคืื ืฉืืึทื ืืืขื ืงืจืืืืืื ื ื ืืึท ืึทืืืืฉืขืงืฅ.

ืืึทื ืฅ ืืืคึผืืึทืืขื ืืืืฉืึทื ืคืื ืื 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)
}
ืืื ืึท ืจืขืืืืืึทื, ืืื ืืื ืืืขืจ ืงืืืขื ื ืงืึธื ืืืจ ื ืืฆื "ืงืึทืกืงืึทืืื ื ืืืกืืขืงื" ืคึฟืึทืจ ืืขืืขืจ ืืึทืื ืืึธืืืคืืงืึทืืืึธื ืึธืคึผืขืจืึทืฆืืข. ืคึฟืึทืจ ืืืึทืฉืคึผืื, ืคึฟืึทืจ ืึท ืึทืจืืึทื ืืืืื ืึธืคึผืขืจืึทืฆืืข ืขืก ืงืืงื ืืื ืืึธืก:
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 }
))
} ืขืจืฉืืขืจ ืืืคึฟื getManagedEntities ื ืขืื ืึทืืข ืฆืืืขืืืืื ืึทืืืืฉืขืงืฅ, ืืื ืืขืืึธืื ืืขืจ ืืืคึฟื cascadeDelete ืจืขืงืืจืกืืืืขืื ืืืืืฅ ืึทืืข ืืขืืืืื ืึทืืืืฉืขืงืฅ ืืืืืขืจ ืฉืจืืืื ื ืืึท ืึธื ืขืก. ืืืจ ืกืืฃ ืึทืจืืืฃ ื ืืฆื ืืขื ืฆืืืึทื ื ืืขืฉืึทืก ืื ืึทืคึผืืึทืงืืืฉืึทื. ืืึผืจืื ืืืงืก ืืื ืจืขืึทืื ืืขื ืขื ืืึธืจ ื ืืืึธ. ืืืขื ืืืจ ืืึธืื ืืืจืืืขืงืึธืื ืื ืืขืืืข ืืขืืฉืขืจืืึทื ื ืคืื ืื ืึธืคืขื ืืืงืืึทื ืคืื ืกืืึทืจืืึทืคึผ ืฆืืื ืืืืฃ ืื ื ืืืขืจ ืคืื ืงืึทืื ืกืืึทืจืฅ ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื, ืืืจ ืืขื ืื ืจืขืืืืืึทื.

ืื ืืจืื ืฉืืจื ืืืืืื ืื ืึธืคืขื ืืืงืืึทื ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืืึทืคึผ ืฆืืื ืืืืฃ ืื ื ืืืขืจ ืคืื ืงืึทืื ืกืืึทืจืฅ ืืขืฉืึทืก ืึธืืึทืืึทืืืง ืงืึทืกืงืืื ืืืืืฉืึทื ืคืื ื ืขืกืืขื ืึทืืืืฉืขืงืฅ.
ืจืขืืืืืึทืื ืืื ืงืึทื ืงืืืืฉืึทื ื
ืื ืืึธืืื-ืืจืึธืืื ื ืจืขืึทืื ืืึทืืึทืืืืก ืืื ืืขืคึฟืืจื ืื ืึทืคึผืืึทืงืืืฉืึทื ืฆื ืงืึทืืขืจ ืืืืขืจ ืกืืึธืืื. ืืืจ ืืืคืจืืื ืึท ืืขืจืืืึทื ืืืงื ืืื ืืื ืืืขืจ ืืืืืขื ืข "ืงืึทืกืงืึทืืื ื ืืืกืืขืงื" ืคืื ื ืขืกืืขื ืึทืืืืฉืขืงืฅ. ืืื ืืืฆื ืืืจ ืืึธื ืืืึธืจ ืืื ืึธืคึผืฉืึทืฆื ืืื ืืื ืืืขืจ ืืึทืฉืืืก ืึทืคืขืงืืึทื ืื ืึทืคึผืืึทืงืืืฉืึทื ืกืืึทืจืืึทืคึผ ืฆืืื ืืืจื ืื _app_start ืืขืืจืืง.

ืคึฟืึทืจ ืึทื ืึทืืืกืืก, ืืืจ ื ืขืืขื ืึท ืฆืืื ืคืื 90 ืืขื ืืื ืืขื: ืื ืึทืคึผืืึทืงืืืฉืึทื ืงืึทืืขืจ ืฆืืื, ืืืืืข ืื ืืืืืึทื ืืื ืื ืืืึธืก ืคืึทืื ืืืืฃ ืื 95 ืคึผืจืึธืฆืขื ื ืคืื ื ืืฆืขืจืก, ืื ืืขืืืืื ืฆื ืคืึทืจืืื ืขืจื ืืื ื ืื ืืขืจ ืจืืกืขืก.

ืืืื ืืืจ ืงืืง ืืื ืื ืืืื-ืืึธื ืืฉืึทืจื, ืื _app_start ืืขืืจืืง ืงืืงื ืืึธืจ ืืืืื ืืื ืืื ืืืืื ืืงืขืจ ืืื 1 ืกืขืงืื ืืข.
ืขืก ืืื ืืืื ืืืขืจื ืฆื ืืืืื ืึทื ืืืจื ืคืขืืืงืืึทื, Firebase ืกืขื ืื ื ืึธืืืึทืคืึทืงืืืฉืึทื ื ืืืื ืื ืืืืืึทื ืืืขืจื ืคืื _app_start ืืงืกืืื 5 ืกืขืงืื ืืขืก. ืึธืืขืจ, ืืื ืืืจ ืงืขื ืขื ืืขื, ืืืจ ืืึธื ื ืืฉื ืคืึทืจืืึธืื ืืื ืืืืฃ ืืขื, ืึธืืขืจ ืืื ืืืื ืืื ืืื ืืฉืขืง ืขืก ืืคืืจืืฉ.
ืื ืกืคึผืขืฆืืขืืข ืืึทื ืืืขืื ืื ืจืขืึทืื ืืึทืืึทืืืืก ืืื ืึทื ืขืก ืืื ืึท ื ืื-ืจืืืืืฉืึทื ืึทื ืืึทืืึทืืืืก. ืืจืึธืฅ ืืืื ืื ืคืื ื ืืฆื, ืขื ืืขืืงืืื ืฆื ORM ืกืึทืืืฉืึทื ื ืืื ืึทืืืืฉืขืงืฅ ืคึฟืึทืจืืื ืืื ื, ืขืก ืืื ื ืืฉื ืืึธืื ืงืึทืกืงืืื ืืืืืฉืึทื.
ืืืื ืืึธืก ืืื ื ืืฉื ืืขื ืืืขื ืืื ืืฉืืื, ื ืขืกืืขื ืึทืืืืฉืขืงืฅ ืืืขื ืึธื ืงืืืึทืื ืืื "ืจืื ืขื ืึทืืืขืง." ืื ืืึทืืึทืืืืก ืืืขื ืืืึทืงืกื ืงืขืกืืืืขืจ, ืืืึธืก ืืื ืงืขืจ ืืืขื ืืืืจืงื ืื ืกืืึธืืืึทืื ืึธืืขืจ ืกืืึทืจืืึทืคึผ ืคืื ืื ืึทืคึผืืึทืงืืืฉืึทื.
ืืื ืืึธื ืืขืืืืื ืืื ืืืขืจ ืืขืจืคืึทืจืื ื ืืื ืึทืืื ืฆื ืืขืฉืืืื ื ืืึทืื ืึท ืงืึทืกืงืืื ืืืืืฉืึทื ืคืื ืึทืืืืฉืขืงืฅ ืืื ืจืขืึทืื, ืืืึธืก ืืื ื ืึธื ื ืืฉื ืืืืก ืคืื ืื ืงืขืกืื, ืึธืืขืจ ืขืก ืืื ืืขืืืขื ืืขืจืขืื ืืืขืื ืคึฟืึทืจ ืึท ืืึทื ื ืฆืืึทื ะธ . ืืื ืืื ืืืขืจ ืคืึทื, ืืึธืก ืืื ืืืืขืจ ืกืคึผืืืึทื ืื ืกืืึทืจืืึทืคึผ ืฆืืื ืคืื ืึทืคึผืืึทืงืืืฉืึทื.
ืืจืึธืฅ ืื ืืืกืงืืกืืข ืืืขืื ืื ืึธื - ืึธื ืืืืกืืขื ืคืื ืืขื ืฉืืจืื, ืืขืจ ืึทืืืขืง ืคืื ืงืึทืกืงืืื ืืืืืฉืึทื ืืื ืจืขืึทืื ืืื ืืืจืืืขืงืึธืื ืืืจื ืคึผืืึทื. ืืืื ืืืจ ืคึผืืึทื ืึท ื ืืึทืข ืึทืคึผืืึทืงืืืฉืึทื, ื ืขืืขื ืืขื ืืื ืืฉืืื. ืืื ืืืื ืืืจ ืฉืืื ื ืืฆื Realm, ืืฉืขืง ืืืื ืืืจ ืืึธืื ืึทืืึท ืคึผืจืึธืืืขืืก.
ืืงืืจ: www.habr.com

