ããã«ã¡ã¯ãæ¥æ¬çããããã®ã¨ã³ã¸ãã¢ãªã³ã°ã»ããã¼ã¸ã£ã®è¤åã§ãã
åã¯askenå
¥ç¤¾å½æã¯Androidã¨ã³ã¸ãã¢ã§ããã
ã¢ã¼ããã¯ãã£æ¹åã«ãæºãã£ã¦ãã¾ããããä»åã¯ããã®å¤å®¹ã®æ´å²ãæ¯ãè¿ã£ã¦ã¿ããã¨æãã¾ãã
- æå³
- éå»ã®å人ãã¡ã¸ã®å°æ¬
- è£è¶³ï¼ã¢ã¼ããã¯ãã£ã®å³ã«ã¤ãã¦
- ã¢ã¼ããã¯ãã£ã®æ´å²
- Step1: æ¥æ¬çããããã®ç«ã¡ä¸ãã¨ãNo architecture
- Step2: ç±³å½çAsken Dietç«ã¡ä¸ãã¨ãMVP
- Step3: æ°ã¡ã³ãã¼ã¸ã§ã¤ã³ã課é¡ã®æ®ãMulti-Module & Layered architecture
- Step4: æ°ã¡ã³ãã¼ã®ã¸ã§ã¤ã³ãæ§ããç¦ã£ã¦ééã£ã¦ãã¾ã£ãMVVM
- Step5: 社å¡Androidã¨ã³ã¸ãã¢ã2åä½å¶ã«ãæ¹åãããMVVM
- Step6: 社å¡Androidã¨ã³ã¸ãã¢3åãè æé²æ¢å±¤ã¨Repository
- Step?: ã¢ã¼ããã¯ãã£ã®ææ¥ãä»æ¥ããå¥åº·ã«ããçºã«
- ãªãã¡ã¬ã³ã¹
- ãç¥ãã
æå³
åã¯ãã1â2å¹´ããã¦ãã¨ã³ã¸ãã¢ãªã³ã°ãããæ¯éãå¾ã
ã«æ¸ãããæè¿ã§ã¯å
¨ãããã°ã©ãã³ã°ã¯ããªãç¶æ
ã«ãªã£ã¦ãã¾ãã
ããããå®å
¨ã«æãé¢ãã¦ããæ°ã¶æçµã¡ã¾ãããããã¾ã§ç¤¾å
Androidã¨ã³ã¸ãã¢ã®ã¿ãªãã¾ã¨ååãã¦æ¨ãé²ãã¦ããæè¡çãªèæ¯çã
ã®å
¨ã¦ããæããã¦ç¤¾å
ã«å
±æã§ããã®ãã¨æççã«æãå§ãã¾ããã
ããã¯ãå¾ä»»ã®æ¹ã
ããããã¨æå³ä¸æã®æ§é ãã¢ãã«ãæ®ãããäºã§ãããè¦å´ãæ®ãã¦ãã¾ãã¨ãããã¨ã«ãªãã¾ãã
ãããã£ãäºæ
ãé¿ããã¹ããããã¾ã§ã®åãçµã¿ã¨æå³ãæãåºããã¨æãç«ã¡ã¾ããã
ï¼ããããã°ã社å¤ã®æ¹ã
ã¸ã®ãããããã¨ã³ã¸ãã¢ãè²ã
ãã£ã¦ãããã ãªãã¨æ¸©åº¦æãä¼ããã°è¯ããªã¨æãã¾ã)
éå»ã®å人ãã¡ã¸ã®å°æ¬
念ã®çºã§ãããä½ãç¹å®ã®ã¢ã¼ããã¯ãã£ãæ¹å¤ããæå³ã¯ããã¾ããããçµæã¨ãã¦æè¡è² åµã«ãªã£ã¦ãã¾ã£ãåãçµã¿ãæ¹å¤ãããã®ã§ã¯ããã¾ããã
ãã®æã
ã«ããã¦ããã¸ãã¹ã®æ¿æµã®æ¸¦ä¸ã§åºæ¥ããéãã®å
¨åãå°½ãããçµæãã¦ã¼ã¶ã¼ã®çæ§ã®å¥åº·ããµãã¼ãã§ããä»æ¥ãããã¾ãã
æãæµããã°ãã¸ãã¹ãå¤å®¹ããæ°ããæè¡ãçã¾ããå½æã®åªåã¯èªç¶ã¨è² åµã¸ã¨å¤ãã£ã¦ããã¾ãã
è² åµãçã¾ããã®ã¯ãã¿ããªé å¼µã£ãããã¿ããªåãã¨ãã証æã ã¨æã£ã¦ãã¾ãã
è£è¶³ï¼ã¢ã¼ããã¯ãã£ã®å³ã«ã¤ãã¦
以ä¸ã®æ¬æã«ã¯ãæ¥æ¬çãããããã¨ãç±³å½çAsken Dietããç»å ´ãã¾ãã
説æãå°ãã§ãç°¡ç´ ã«ããããã«ãã©ã¡ãã«ãã©ã®ã¢ã¼ããã¯ãã£ãã©ã®ç¨åº¦ãé©ç¨ããã¦ãããã¯æè¨ãã¦ãã¾ããã
åStepã«ãããå³ã¯ãããã®æã
ã®ãææ°ã®æ¹éãã¨ããåæã§ã覧ãã ããã
ã¾ããå³ã¯ mermaid ã§æãã¦ï¼ãã®ãã£ããã£ãæ²è¼ãã¦ï¼ãã¾ãã
ã¢ã¼ããã¯ãã£ã®æ´å²
Step1: æ¥æ¬çããããã®ç«ã¡ä¸ãã¨ãNo architecture
ããããã®ã¢ãã¤ã«ã¢ããªã®ç«ã¡ä¸ãã¯ååä¼ç¤¾æ§ã¨ã¿ãã°ãçµã¿iOSãå
è¡ãã¾ããã
ãã®å¾ãAndroidã¸ã®å±éã®éãæåã®ã¨ã³ã¸ãã¢ãæ¡ç¨ããã¾ããã
å½¼æ°ãããAndroidã¢ããªã¯æªçµé¨ã ã£ãã®ã§ãéçºåå¼·æ¬ã¨å
è¡ããiOSã¢ããªãè¦ãªãããæåã®ãã¼ã³ãã¾ã§5ã¶æã§éçºãããã®ã ããã§ãï¼åãããï¼ã
ãã®å¾ãå½æã¯ãä½ãã¦ã¼ã¶ã¼ã«ã¨ã£ã¦ä¾¡å¤ãªã®ãï¼ããå
¨ãåããããææ¢ãç¶æ
ã
ã¹ã¿ã¼ãã¢ããã®ããã®ä»®èª¬æ¤è¨¼ããã¨ã«ããåãç¶ããæ¥ã
ã
ä½ã£ã¦ã¯å¤ããä½ã£ã¦ã¯å¤ãã®æ¥ã
ã ã£ãã¨ä¼ºã£ã¦ãã¾ãã
Step2: ç±³å½çAsken Dietç«ã¡ä¸ãã¨ãMVP
æ¥æ¬çãµã¼ãã¹ãè»éã«ä¹ãå§ããé ãæ´ãªãäºæ¥ã®æ¡å¤§è·¯ç·ã¨ãã¦ãç±³å½çAsken Dietãç«ã¡ä¸ããã¾ããã
ç«ã¡ä¸ãã«éãã¦ã¯ãï¼ä»æ¹ãªãç¶æ³ã§ãããï¼å¢ãä»»ãã§ä½ãç¶ããæ¥æ¬çããããéçºã®åçãããã¨ã«ããåå¼·ä¼ã«è¡ã£ã¦ã¯æ
å ±ä»å
¥ããå®æ¦æå
¥ã«ãããããæ¥ã
ã ã£ãã¨ä¼ºã£ã¦ãã¾ãã
ãã®ä¸ã§ "Androidã¢ããªã¯MVPã ï¼ ã£ã¦ã¿ããªè¨ã£ã¦ãã" ãããªã®ã§ ããããªã®ããããããããã£ã¦ã¿ããï¼ã ã¨ããäºã§åãè¾¼ãã§ãã£ãããã§ãã
èåãªã©ã¤ãã©ãªãç©æ¥µçã«å°å
¥ï¼Retrofit, ButterknifeãRxJavaãªã©ï¼ãããªã©æè¡é©æ°ãåçã«é²ã¿ã¾ããã
ä¸æ¹ã§ããã¤ã©ã¼ãã¬ã¼ãã大éçºçããæ°å¹´å¾ã«é¤å»ã大å¤ã«ãªã£ã¦ãã¾ãã¾ãããï¼ã¿ãªããããããªãã by å½æã®å®è£
è
ï¼
ãã ãã¢ããªã®å®å®åã¯ã©ã¤ãã©ãªæªä½¿ç¨ã®æ¥æ¬çããããããåä¸ããäºãã§ãã¾ããã
Step3: æ°ã¡ã³ãã¼ã¸ã§ã¤ã³ã課é¡ã®æ®ãMulti-Module & Layered architecture
åä»»è
ãçµç¹æ¡å¤§ã®ããããã¸ã¡ã³ãã¸ç§»è¡ããã¿ã¤ãã³ã°ã§ãæ°ã¡ã³ãã¼ï¼ã¨ãããåï¼ããAndroidã¨ã³ã¸ãã¢ã¨ãã¦ã¸ã§ã¤ã³ãã¾ããã
å
¥ç¤¾å¾ã®æåã®æ
å½ã¯ç±³å½çAsken Dietã§ããããã¹ã¯ã©ã ãã¼ã ã«å
¥ã£ã¦ç¬¬ä¸ã«æã£ãã®ã¯éçºã®æè»æ§ã®é«ãã§ããã
åèªèº«ãã¬ãã¬ãã®SIerè«è² éçºãã¬ã¤ã³ã°ããã¼ã¸ã£ããã¦ãã¦ã®è»¢è·ã ã£ãã®ã§ãé©å¿çãªã¹ã¯ã©ã ããã»ã¹ã¨"ã¾ãã¯åããããã¯ããï¼" ã¨ãã価å¤è¦³ã«è¿½éããã«ã¯ãèªèº«ã®éçºã¹ãã«ã®å§åçãªä¸è¶³ãçªãã¤ãããã¾ããã
ããããã¯ãæ¹ãã¦Androidéçº1æ¬ã«åãåãæ¥ã
ã§ãæè¡ã«ã³ãã¡ã¬ã³ã¹ã«ãç©æ¥µçã«åå ãã¾ããã
ããã§åºä¼ã£ãã®ãMulti-Moduleæ§æã§ãã
å½æã®èªåã¯ããã«ãæéãçããªãï¼ãã¨ããç¹ã«æ¹ããã社å
ã«ããå¼·å¼ã«èª¬å¾ãããçµå±ã1ã¶æãããã§ãªãªã¼ã¹ã«è³ã£ãã¨æãã¾ãã ï¼ãã¿ã¾ããã§ããããï¼
ãã®å¾ããã«ãæéãè¨æ¸¬ãã¾ãããå½æã®éçºMacã§ã-51s(79sâ28s)ãã¨ãç®çã¨ãã¦ãããã«ãæéç縮ã«æåãã¾ããã
ããããç¡çããã¬ã¤ã¤ã¼åããã ããªã®ã§ã
- ä¾åé¢ä¿ã®é転ã®ç¶æ ã«ãªã£ã¦ããªãç®æã沢山æ®ã£ã¦ãã
- ä¸è¦ãæ´é ããã¦ãã風ã ãã¬ã¤ã¤ã¼å ã¯ç¡çãªç§»è¡ã§ä½è¨ã«è¤é度ãå¢ãã
- DDDã®æèã®ãã¡ã¤ã³å±¤ããåã«ãã¼ã¿ã¯ã©ã¹ãå ¥ãã¦ããã ã
ãªã©èª²é¡ããããæ¬å½ã®æå³ã§è²¬åã®åé¢ï¼æ§é ã®ç§©åºãå®ç¾ã§ããã¨ã¯ãããªãç¶æ
ã§ããã
ã¨ã¯ãããä»å¾ã«ã¤ãªããä¸æ©ã«ãªãã¾ããã
Step4: æ°ã¡ã³ãã¼ã®ã¸ã§ã¤ã³ãæ§ããç¦ã£ã¦ééã£ã¦ãã¾ã£ãMVVM
ãã®å¾ãæ«ãã¯ç±³å½çAsken Dietã®æè¡æ¹åã«ã²ãããæã¡è¾¼ãæ¥ã ãç¶ãã¾ããã
- åè¿°ã®ã¢ã¼ããã¯ãã£ã®é²åã®ç¶ã
- æ°æè¡ã®å°å
¥
- Kotlin, Coroutine, Jetpack, AndroidX, DataBinding, Google Play Billing Library, Dagger2, Mockito, ... etc
ãããªããæ¥ãæ°ããAndroidã¨ã³ã¸ãã¢ãã¸ã§ã¤ã³ãããã¨ã決ã¾ãã¾ããã
ç®ä¸ãæè¡æ¹åã«çãã¦ããåã¯ããæ°ããæ¹ãæ¥ãåã«ã絶対ã«ããè¯ãã³ã¼ãã«ãããã ãã¨å®å
¨ã«æ段ã¨ç®çãé転ãã¦ãã¾ããã
ãããªä¸ãã¢ã¼ããã¯ãã£ã®æãããééãããã¦ãã¾ãã¾ããã
å½æãViewã®interfaceã®implementã«ãããã¤ã©ã¼ãã¬ã¼ãã¨Callbackå°çï¼åä»»ã®æ¹ããã¿ã¾ããæ±ï¼ã«ããPresenterã«èª²é¡ãæãã¦ããåã¯ViewModelã«ç®ãã¤ãã¦ãã¾ããããããªãã°ããã£ã¨ã¹ãã¼ãã«ã³ã¼ããæ¸ãããã¨ã
ãã ããã®æã«ãã©ã¤ããæ段ãããªãã¨ViewModelã«Viewã®åç
§ãæãããæä½ãããã¨ããã¢ã³ããã¿ã¼ã³ã§ãããã
ãããViewModelã¯Android SDKãæä¾ããViewModelãç¶æ¿ãããç¬èªã§ä½æããã¨ããæãããç¶æ³ã«ã
å®å
¨ã«ééã£ã¦ãããã¨ã«æ°ã¥ãããè¯ããã¨æã£ã¦ã´ãªã´ãªã«ãªãã¡ã¯ã¿ãªã³ã°ãé²ããçµæ
ãã®ã½ã¼ã¹ã³ã¼ãã¯ããã®ã¾ã¾æè¡è² åµã«ãªã£ã¦ãã¾ãã¾ãã...ã
æè¡è² åµ(ããããªãã by è¤å)
- ViewModelãç¬èªå®è£
- æ½è±¡åº¦ãé«ãããããã¤ã責åãè©°ãè¾¼ã¿ããã親ViewModel
- å é¨ã§Viewæä½ãããäºã«ããããã¸ãã¯ã¨Viewã®å¯çµå
Step5: 社å¡Androidã¨ã³ã¸ãã¢ã2åä½å¶ã«ãæ¹åãããMVVM
ãããæ¸ãã¦ããä»ãç³ã訳ãªãæ°æã¡ã§ä¸æ¯ãªã®ã§ãããæ°ã¡ã³ãã¼ãã¸ã§ã¤ã³ãã¦ãããæ£ããMVVM+LiveDataã®ä½æ³ã«åãæ¿ããã¾ããã
ä¸æ°ã«æè¡å°å
¥ããã¾ãã£ãã®ããããæ«ãã¯å®å®ããéçºãç¶ãã¾ããã
(ãããå¾ä»»ã®æ¹ã¯æ°æ§å
¥ãä¹±ããã¢ã¼ããã¯ãã£ã«ç¿»å¼ããã大å¤ã«è¦å´ãããã¨æãã¾ããã)
ãããªä¸ãåã¯æ¥æ¬çããããæ
å½ã«ç°åã決ã¾ãã¾ããã
åè¿°ã®éããæ¥æ¬çããããã¯ãNo architectureï¼Full Javaãã®ç¶æ
ã§ããã
éä¿¡å¨ãã®å質ãä¸å®å®ã§èæ½åãé²ãã§ããã¨ããã®ããããã¾ãçæããã®ã¯ãã«ãã¢ã¸ã¥ã¼ã«ï¼ã¬ã¤ã¤ã¼ãã¢ã¼ããã¯ãã£ã®å°å
¥ã§ããã
ç±³å½çAsken Dietã§ã®è©¦è¡é¯èª¤ã®çµæããããå°å
¥èªä½ã¯ãã»ã©è¦ã«ã¯ãªãã¾ããã§ããã
ãã ãRetrofitåå°å
¥ã ã£ãã®ã§ãæ¢åAPIä»æ§ã網ç¾
ãåããã«ãªãªã¼ã¹ç´å¾ã«ä¸å
·åãçºçãã¦ãã¾ããªã©ãè¦ãçµé¨ã¯è²ã
ã¨ãã¾ãããã
ï¼ã¡ãªã¿ã«ããã®è¦ãçµé¨ã®ä¸ã§ãéä¿¡å¨ãã¯å¾¹åºçã«ãã¹ãã³ã¼ããè¨è¿°ãããã®å¾ã¯å®å®ãã¾ããï¼
å¾ä»»ã®æ¹ã¸å¤§ããªè² åµãæ®ãã¦ãã¾ã£ãäºãå¾æãã¤ã¤ãæ¥æ¬çããããã®é²åã¸ã¨ææ¦ãå§ãã¾ããã
Step6: 社å¡Androidã¨ã³ã¸ãã¢3åãè æé²æ¢å±¤ã¨Repository
æ¥æ¬çããããã®éçºã§ã¯ããã¼ããã¼æ§ã¨å¯ã«é£æºããªããæ°è¦å
¥ä¼ã®ç»é¢ããã¼ãå·æ°ããã
çèã ãã ãã®ãµã¼ãã¼ã¨ã³ã¸ãã¢ãå
¥ç¤¾ãã¦æ²¸ãç«ã¤ä¸ãããçããã£ã¡ã¤ã¯ã³ã¼ã¹ããªãªã¼ã¹ãããã¨
大æãããªéçºãç¶ãã¦ãã¾ããããã®é ã¯ã社å
ã¬ãã¥ã¼ä½å¶ãå¼·åããã¦ä»¥åããè
°ãæ®ãã¦éçºã§ããããã«ãªãã¾ããã
ãããªä¸ã3人ç®ã®Androidã¨ã³ã¸ãã¢ãå
¥ç¤¾ãã¾ããã
å
¥ç¤¾å¾ã®æ¢åã³ã¼ããã¢ã¼ãã®èª¬æä¼ããã¦ããä¸ã§å½¼ã¯ããããsuspendã®IFã«ããªããã§ããï¼ãã¨çç´ãªçåãåãã¦ããã ãã¾ããã
å½æããã¾ãã¡suspendãåãã£ã¦å±
ãªãã£ãåã¯ãæ¹ãã¦åå¼·ãç´ãã¾ããã
ï¼android/architecture-samplesã«ã¯ãç¸å½ãä¸è©±ã«ãªãã¾ããããï¼
æ°ã¡ã³ãã¼ã®æ°ãã観ç¹ã®å
ãAndroidã¨ã³ã¸ãã¢ã¯å¿è«ãiOSã¨ã³ã¸ãã¢ããã¼ããã¼æ§ã¨ãã¬ãã¥ã¼ããªãããæçµçã«ä»¥ä¸ã®é²åãéãã¾ããã
- KTXã®å°å ¥
- viewModelScopeå ã§å®è¡ããsuspend interfaceãæã£ãRepositoryãå®æ
- ãµã¼ãã¼APIããJsonããã¼ã¹ããéã«ãç´æ¥ãã¡ã¤ã³ã¢ãã«ã¸å¤æããã«è æé²æ¢å±¤ãçµç±ããæ§é ãæ¡ç¨
- Fat ViewModel対çã¨ãã¦ãUiModelãæ¡ç¨
- ãã¡ã¤ã³ã¢ãã«ãæ¡å ããã
- UiModel / ãã¡ã¤ã³ã¢ãã«ã®Unit testãæ¡å ããã
- ä¸é¨ã®ViewModelã«Unit testãå®è£ ããã
- LocalDataSourceã¨ãã¦Roomãå°å ¥ãæ½è±¡åã«æåãinfra層ã«å®å ¨ã«éãè¾¼ãã
- å ¬å¼ã¢ã¼ããã¯ãã£ã«è¿ã¥ãããã¨ã§ããã£ããã¢ããã®è² è·ãå±äººåã軽æ¸
ãã®æ§æã¯é常ã«éçºããããããåçã«çç£æ§ãé«ã¾ã£ãã¨æãã¾ãã
å®ã¯çä¸ãå¿
è³ã ã£ãéçºããã¸ã§ã¯ãã1åã ãããã¾ãããããã®æ§æã«ãããã¨ã«ãã£ã¦
å©ç¨å質ãå
é¨å質ãè½ã¨ãããææ¥éãã®ãªãªã¼ã¹ãã§ãããªã©å¤§ããªå¹æãçºæ®ãã¾ããã
æ¹åã®è£è¶³
ãã¤ã³ã1ï¼suspend IF Repositoryã§éä¿¡ã³ã¼ã«ããã¯å°çãã解æ¾ããã
ãã®æ§æã«ãªãåã¯ãéä¿¡ã¯Callbackã§åãåã£ã¦ãã¾ããã
å®ã¯ãHomeç»é¢ãèµ·åããæãªã©ã¯å¤ãã®APIãå®è¡ãã¦ããããã¤ãç¶æ
ã«å¿ãã¦å¼ã³åºãé åºãå¤ãã£ããã¨ãã³ã¼ã«ããã¯å°çãã«é¥ã£ã¦ãã¾ããã
ç¾å¨ãå®å
¨ã«è§£æ¶ããã訳ã§ã¯ãªãã®ã§ãããsuspendã§ã³ã¼ã«ããã¯ãã解æ¾ããããã¨ã§ãéåã¨å¯èªæ§ã¨å¤æ´å®¹ææ§ãé«ã¾ãã¾ããã
ãã¤ã³ã2ï¼UiModelã«UIç¶æ ãåé¢ãã¦å¤æ´å®¹æã§ãã¹ã¿ãã«ã«ãªã£ã
ããã¾ã§ã¯ãè¤éãªUIã ã¨ViewModelãFatã«ãªãå¾åãããã¾ããã
åå ã¯ããã¸ãã¹ã«ã¼ã«ããUIã®ç¶æ
å¤æ´ã®ãã¸ãã¯ãViewModelã«ãã¿æ¸ããã§ããã®ã§ã対çã¨ãã¦ãã¡ã¤ã³ã¢ãã«ã«ãã¸ãã¹ã«ã¼ã«ãã«ãã»ã«åãããäºã§å¤å°ã®å¹æã¯ããã¾ããã
ãããããViewã®ç¶æ
ãã¯ãã¡ã¤ã³ã¢ãã«ã«éãè¾¼ããããã«ãããããå°ã£ã¦ãã¾ããã
ããã§æ°ãã«UiModelãå°å
¥ããUIã®ãã¼ãã®ç¶æ
ãã¤ãã¥ã¼ã¿ãã«ãªãã¸ã§ã¯ãã¨ãã¦è¡¨ç¾ãã¦LiveDataã§Activity/Fragmentã¸éç¥ããæ§ã«ãã¾ããã
çµæãUIã®ãã¹ãã³ã¼ãããããæ§ã«ãªããèªå·±ããã¥ã¡ã³ãåã«ããä»æ§ãæ確ã«ãªãã¾ããã
ãã¹ãã³ã¼ãã®ãããã§å¤æ´ã容æã«ãªãã¾ããã
åèï¼github: DroidKaigi/conference-app-2020#viewmodel
Step?: ã¢ã¼ããã¯ãã£ã®ææ¥ãä»æ¥ããå¥åº·ã«ããçºã«
ãããã£ã¦æ¯ãè¿ãã¨ãã¢ã¼ããã¯ãã£ã®é²åã®æ´å²ã¯ãçµç¹ããããã¯ãã®æé·ã®æ´å²ã¨é常ã«éãªããªã¨æãã¾ããã
人ãå¢ããã°è¦³ç¹ãå¤ããããã®å¤æ§æ§ã«ãã£ã¦ãããã¯ããã¢ã¼ããã¯ãã£ãå¼·ããªãã
ã¦ã¼ã¶ã¼ã®çæ§ãå¥åº·ã«ãªãããã«ãaskenã¯å
¨ç¤¾ä¸ä¸¸ã§ãããã¯ãã®æã¤ä¾¡å¤ãé«ãç¶ãã¾ããããã®åå°ã磨ãç¶ããã®ãã¨ã³ã¸ãã¢ãªã³ã°ã®è²¬åã ã¨æãã¾ãã
ãã®æã
ã«ããã¦ãä½ãæ£ããã®ã誰ãæ£è§£ãããããªãä¸ãèªã責任ãæã£ã¦ä¸æ©ãè¸ã¿åºããããã¦å¤±æããããã®è¦ãçµé¨ã¯å¦ã³ã¨ãªãããã®å¦ã³ã¯ãã¼ã ã¡ã³ãã¼ãå·¡ããçµç¹ã®å¦ã³ã¨ãªãã¾ãã
ã¢ã¼ããã¯ãã£ã®ææ¥ãä»æ¥ããå¥åº·ã«ããã¦ã¼ã¶ã¼ã®çæ§ã¸å®å¿ã¨ä¿¡é ¼ã®ãµã¼ãã¹ãæä¾ãç¶ããããã«ããããããæ¥ã ãç²¾é²ãã¦ã¾ããã¾ãã
ãªãã¡ã¬ã³ã¹
- mermaid
- 社å ã§notionã«ããã¥ã¡ã³ããæ®ãå ´åããGithubã§ã®èª¬æã®éã«ãã使ã£ã¦ãã¾ã
- android/architecture-samples
- Androidã¨ã³ã¸ãã¢å士ã§è°è«ããéã®ãªãã¡ã¬ã³ã¹ã¨ãã¦å½ææ´»ç¨ãã¾ããã
- github: DroidKaigi/conference-app-2020#viewmodel
- UiModelã®åèã«ãã¾ããã
- ã¨ãªãã¯ã»ã¨ã´ã¡ã³ã¹ã®ãã¡ã¤ã³é§åè¨è¨
- 社å ã®ãDDDæ¤è¨ä¼ãã¨ããå¦ç¿ä¼ã§ãªãã¡ã¬ã³ã¹ã«ãã¾ããã
- å人çã«ãèªã¿ã¾ããããç¹ã«ã第ï¼é¨ æ¦ç¥çè¨è¨ãã¯ã俯ç°ã®è¦éã¨è¦åº§ãå¾ãä¸ã§å¤§å¤åèã«ãªãã¾ããã
- ç¾å ´ã§å½¹ç«ã¤ã·ã¹ãã è¨è¨ã®åå ãå¤æ´ã楽ã§å®å
¨ã«ãããªãã¸ã§ã¯ãæåã®å®è·µææ³
- 社å ã®ã¢ããªã³ã°æ¤è¨ä¼ã®è¬å¸«ã§ããå¢ç°ããã®æ¬ã§ãã
- ãã®æ¬åä½ã§ãå½¹ã«ç«ã¡ã¾ããããã¨ã´ã¡ã³ã¹æ¬ãæ½è±¡åº¦é«ãã®ã§ããã®å ·ä½ã¨ãã¦ã®è¦æ¹ãã§ãã大å¤åèã«ãªãã¾ããã
ãç¥ãã
askenã§ã¯ãä¸ç·ã«åãã¦ãããã¨ã³ã¸ãã¢ãåéãã¦ãã¾ãï¼