Slide 1

Slide 1 text

ಡΈ΍͍͢ίʔυͷॻ͖ํˡୈ 7 ճ ґଘؔ܎ ‐‐

Slide 2

Slide 2 text

લճͷ͓͞Β͍: ݁߹౓ ऑ͍݁߹Λ࢖͏ - ελϯϓ݁߹ɾσʔλ݁߹Λҙࣝͯ͠࢖͏ ஫ҙ͢Δ΂͖݁߹ - ಺༰݁߹: ಺෦ͷৄࡉͳಈ࡞ʹґଘ͢Δؔ܎ - ڞ௨݁߹ɾ֎෦݁߹: Մมͳάϩʔόϧσʔλ࢖͏ؔ܎ - ੍ޚ݁߹: ʮԿΛ͢Δ͔ʯΛҾ਺ͰܾΊΔؔ܎

Slide 3

Slide 3 text

ߨٛͷߏ੒ - ಋೖͱݪଇ - ࣗવݴޠ: ໋໊, ίϝϯτ - ܕͷߏ଄: ঢ়ଶ, ؔ਺ - ܕؒͷߏ଄: ґଘؔ܎I, ґଘؔ܎II - ϨϏϡʔ ґଘؔ܎

Slide 4

Slide 4 text

ґଘؔ܎ IɾII ͷ಺༰ ґଘؔ܎ I: - ݁߹౓ ґଘؔ܎ II: - ํ޲ - ॏෳ - ໌ࣔੑ ґଘؔ܎ > ํ޲

Slide 5

Slide 5 text

ґଘͷํ޲ ՄೳͳݶΓඇ८ճʹ͢Δ A C B A C B ґଘؔ܎ > ํ޲

Slide 6

Slide 6 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ - Մม → ෆม - ΞϧΰϦζϜ → σʔλߏ଄ - සൟʹߋ৽͞ΕΔϨΠϠ → ҆ఆతͳϨΠϠ ґଘؔ܎ > ํ޲

Slide 7

Slide 7 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ ґଘؔ܎ > ํ޲

Slide 8

Slide 8 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 9

Slide 9 text

ݺͼग़͠ݩ΁ͷґଘ: ʮΑ͘ͳ͍ʯྫ 1/2 class MediaViewPresenter { fun getVideoUri(): Uri = ... fun playVideo() { videoPlayerView.play(this) ... class VideoPlayerView { fun play(presenter: MediaViewPresenter) { val uri = presenter.getVideoUri() ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 10

Slide 10 text

ݺͼग़͠ݩ΁ͷґଘ: ʮΑ͘ͳ͍ʯྫ 2/2 MediaViewPresenter fun getVideoUri VideoPlayerView fun play play getVideoUri ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 11

Slide 11 text

ݺͼग़͠ݩ΁ͷґଘ: Կ͕ʮΑ͘ͳ͍ʯ͔ ಈ࡞Λ೺Ѳ͠ʹ͍͘ playVideo ͷॲཧͷྲྀΕ͕୯७Ͱͳ͍ มߋͷӨڹൣғ͕େ͖͍ MediaViewPresenter ͷมߋ͕ VideoPlayerView ʹӨڹΛ༩͑Δ ςετ͕ॻ͖ʹ͍͘ VideoPlayerView ͷϞοΫΦϒδΣΫτ͕ෳࡶʹͳΔ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 12

Slide 12 text

ݺͼग़͠ݩ΁ͷґଘ: վળํ๏ ෆཁͳίʔϧόοΫΛ࡟আ͢Δ - Ҿ਺ͱͯ͠஋Λ౉͢ - খ͞ͳΫϥεͱͯ͠நग़͢Δ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 13

Slide 13 text

ݺͼग़͠ݩ΁ͷґଘ: վળํ๏ ෆཁͳίʔϧόοΫΛ࡟আ͢Δ - Ҿ਺ͱͯ͠஋Λ౉͢ - খ͞ͳΫϥεͱͯ͠நग़͢Δ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 14

Slide 14 text

Ҿ਺ͱͯ͠஋Λ౉͢ class MediaViewPresenter { fun getVideoUri(): Uri = ... fun playVideo() { videoPlayerView.play(this) ... class VideoPlayerView { fun play(presenter: MediaViewPresenter) { val uri = presenter.getVideoUri() ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 15

Slide 15 text

Ҿ਺ͱͯ͠஋Λ౉͢ class MediaViewPresenter { fun getVideoUri(): Uri = ... fun playVideo() { videoPlayerView.play(getVideoUri()) ... class VideoPlayerView { fun play(videoUri: Uri) { ... ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 16

Slide 16 text

ݺͼग़͠ݩ΁ͷґଘ: վળํ๏ ෆཁͳίʔϧόοΫΛ࡟আ͢Δ - Ҿ਺ͱͯ͠஋Λ౉͢ - খ͞ͳΫϥεͱͯ͠நग़͢Δ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 17

Slide 17 text

খ͞ͳΫϥεͱͯ͠நग़͢Δ ඇಉظʹ݁ՌΛॲཧ͢Δ৔߹͸஋Λ౉ͤͳ͍ ґଘઌͷίʔυΛΫϥεͱͯ͠நग़͢Δ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 18

Slide 18 text

খ͞ͳΫϥεͱͯ͠நग़͢Δ: εςοϓ 1 ίʔϧόοΫ෦෼Λ໊લͷ͍ͭͨ಺෦Ϋϥεʹ͢Δ MediaViewPresenter VideoPlayerView VideoUriProvider fun getVideoUri ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 19

Slide 19 text

খ͞ͳΫϥεͱͯ͠நग़͢Δ: εςοϓ 2 ಺෦ΫϥεΛ֎෦Ϋϥεͷ֎ʹҠಈ͢Δ MediaViewPresenter VideoPlayerView VideoUriProvider fun getVideoUri ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 20

Slide 20 text

ݺͼग़͠ݩ΁ͷґଘ: վળํ๏ ෆཁͳίʔϧόοΫΛ࡟আ͢Δ - Ҿ਺ͱͯ͠஋Λ౉͢ - খ͞ͳΫϥεͱͯ͠நग़͢Δ ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 21

Slide 21 text

ݺͼग़͠ݩ΁ͷґଘ: ྫ֎ ݺͼग़͠ݩ΁ͷґଘ͕ආ͚ΒΕͳ͍ঢ়گ͸͋Δ - ඇಉظݺͼग़͠: εϨουɾΠϕϯτϦεφ - ϢʔςΟϦςΟߴ֊ؔ਺: List.forEach ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 22

Slide 22 text

ඇಉظݺͼग़͠ͷ؇࿨ ίʔϧόοΫͷར༻໨తɾϥΠϑαΠΫϧɾείʔϓΛ੍ݶ͢Δ - ϓϩϛεύλʔϯɾϑϡʔνϟʔΦϒδΣΫτ ඇಉظॲཧͷݴޠػೳɾϥΠϒϥϦΛ࢖͏ - ίϧʔνϯɾΞΫλʔɾasync/await ґଘؔ܎ > ํ޲ > ݺͼग़͠ݩ → ݺͼग़͠ઌ

Slide 23

Slide 23 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ ґଘؔ܎ > ํ޲ > ৄࡉ → ந৅

Slide 24

Slide 24 text

ৄࡉ΁ͷґଘ ࢠΫϥε΁ͷґଘΛ͠ͳ͍ = this ΍ self ͷܕνΣοΫɾμ΢ϯΩϟετΛආ͚Δ ґଘؔ܎ > ํ޲ > ৄࡉ → ந৅

Slide 25

Slide 25 text

ৄࡉ΁ͷґଘ: ʮΑ͘ͳ͍ʯྫ open class IntList { fun addElement(value: Int) { if (this is ArrayIntList) { ... } else { ... ... class ArrayIntList: IntList() { ... ґଘؔ܎ > ํ޲ > ৄࡉ → ந৅

Slide 26

Slide 26 text

ৄࡉ΁ͷґଘ: Կ͕ʮΑ͘ͳ͍ʯ͔ ੹೚ͷൣғ͕ᐆດ มߋʹର͢Δؤ݈ੑ͕௿͍ - ࢠΫϥεͷ࢓༷ͷมߋ - ৽͍͠ࢠΫϥεͷ௥Ճ ґଘؔ܎ > ํ޲ > ৄࡉ → ந৅

Slide 27

Slide 27 text

ৄࡉ΁ͷґଘ: मਖ਼ྫ ΦʔόʔϥΠυΛ࢖ͬͯμ΢ϯΩϟετΛආ͚Δ open class IntList { open fun addElement(value: Int) { ... class ArrayIntList: IntList() { override fun addElement(value: Int) { ... ґଘؔ܎ > ํ޲ > ৄࡉ → ந৅

Slide 28

Slide 28 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 29

Slide 29 text

ෳࡶͳίʔυ΁ͷґଘ: ʮΑ͘ͳ͍ʯྫ class UserData( val userId: UserId, ... ) class UserDataRequester { fun obtainFromServer(): UserData { ... ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 30

Slide 30 text

ෳࡶͳίʔυ΁ͷґଘ: ʮΑ͘ͳ͍ʯྫ class UserData( val userId: UserId, ... val requester: UserDataRequester ) class UserDataRequester { fun obtainFromServer(): UserData { ... ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 31

Slide 31 text

ෳࡶͳίʔυ΁ͷґଘ: Կ͕ʮΑ͘ͳ͍ʯ͔ ෳࡶͳίʔυͷείʔϓɾϥΠϑαΠΫϧɾࢀর͕؅ཧ͕ࠔ೉ - ୯७ͳίʔυ: είʔϓ΍ϥΠϑαΠΫϧ͕ ଟ༷ - ෳࡶͳίʔυ: είʔϓ΍ϥΠϑαΠΫϧͷ ݫີͳ؅ཧ͕ඞཁ ؤ݈ੑΛଛͳ͏ - ϦιʔεͷϦʔΫͷݪҼʹͳΓ͏Δ - ୯७ͳίʔυͷ҉໧తͳલఏ৚͕݅૿͑Δ ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 32

Slide 32 text

ෳࡶͳίʔυ΁ͷґଘ: վળํ๏ ෳࡶͳίʔυ΁ͷࢀরΛ୯७ʹ࡟আ͢Δ - ෳࡶͳίʔυ͕ඞཁͳΒɺͦͷࢀরΛ໌ࣔతʹ౉͢ class UserData( val userId: UserId, ... ) ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 33

Slide 33 text

ෳࡶͳίʔυ΁ͷґଘ: ྫ֎ ෳࡶͳίʔυ΁ͷґଘ͕ආ͚ΒΕͳ͍ঢ়گ΋͋Γ͑Δ - ϝσΟΤʔλύλʔϯ - ΞμϓλʔɾϑΝαʔυ - σʔλόΠϯσΟϯά ՄೳͳݶΓ༻్ɾείʔϓΛݶఆ͢Δ ґଘؔ܎ > ํ޲ > ෳࡶ → ୯७

Slide 34

Slide 34 text

޷·͍͠ґଘͷํ޲ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ৄࡉ → ந৅ - ෳࡶ → ୯७ ґଘؔ܎ > ํ޲ > ·ͱΊ

Slide 35

Slide 35 text

ґଘͷํ޲: ·ͱΊ ґଘ͸Ұํ޲ʹ͢Δ - ݺͼग़͠ݩ → ݺͼग़͠ઌ - ෳࡶɾৄࡉɾՄม → ୯७ɾந৅ɾෆม ྫ֎: ඇಉظݺͼग़͠ɾϝσΟΤʔλύλʔϯ౳ ྫ֎Λ࢖͏৔߹Ͱ΋ ໨తɾείʔϓɾϥΠϑαΠΫϧΛ੍ݶ͢Δ ґଘؔ܎ > ํ޲ > ·ͱΊ

Slide 36

Slide 36 text

ґଘؔ܎ IɾII ͷ಺༰ ґଘؔ܎ I: - ݁߹౓ ґଘؔ܎ II: - ํ޲ - ॏෳ - ໌ࣔੑ ґଘؔ܎ > ॏෳ

Slide 37

Slide 37 text

ґଘͷॏෳ ਺चͭͳ͗ͷґଘ - ωετ͞Εͨɾ௚઀ࢀরͰͳ͍ґଘ ॏෳͨ͠ґଘؔ܎ͷηοτ - N:M ͷґଘ ґଘؔ܎ > ॏෳ

Slide 38

Slide 38 text

ґଘͷॏෳ ਺चͭͳ͗ͷґଘ - ωετ͞Εͨɾ௚઀ࢀরͰͳ͍ґଘ ॏෳͨ͠ґଘؔ܎ͷηοτ - N:M ͷґଘ ґଘؔ܎ > ॏෳ

Slide 39

Slide 39 text

਺चͭͳ͗ͷґଘ ࢀরͷऔಘͷͨΊ͚ͩʹແؔ܎ͳίʔυʹґଘ͠ͳ͍ MessageTextPresenter TimestampPresenter (MessageDataProvider ) MessageDataProvider ґଘؔ܎ > ॏෳ > ਺चͭͳ͗ͷґଘ

Slide 40

Slide 40 text

਺चͭͳ͗ͷґଘ: ʮΑ͘ͳ͍ʯྫ class TimestampPresenter { val dataProvider: MessageDataProvider = ... fun invalidateViews() { // Update timestamp by `dataProvider` ... class MessageTextPresenter { val timestampPresenter: TimestampPresenter = ... fun invalidateViews() { val messageData = timestampPresenter.dataProvider... // Update message text view by `messageData` ґଘؔ܎ > ॏෳ > ਺चͭͳ͗ͷґଘ

Slide 41

Slide 41 text

਺चͭͳ͗ͷґଘ: Կ͕ʮΑ͘ͳ͍ʯ͔ ෆཁͳґଘؔ܎ MessageTextPresenter ͸ຊདྷ TimestampPresenter ͱ͸ؔ܎ͳ͍ ؒ઀తͳґଘؔ܎ MessageTextPresenter ͱ MessageDataProvider ͷؔ܎͕ෆ໌ྎ ґଘؔ܎ > ॏෳ > ਺चͭͳ͗ͷґଘ

Slide 42

Slide 42 text

਺चͭͳ͗ͷґଘ: मਖ਼ํ๏ ґଘͷωετΛ௚઀తͳґଘؔ܎Ͱஔ͖׵͑Δ MessageTextPresenter TimestampPresenter MessageDataProvider ґଘؔ܎ > ॏෳ > ਺चͭͳ͗ͷґଘ

Slide 43

Slide 43 text

਺चͭͳ͗ͷґଘ: मਖ਼ྫ class TimestampPresenter { val dataProvider: MessageDataProvider = ... fun invalidateViews() { // Update timestamp by `dataProvider` ... class MessageTextPresenter { val dataProvider: MessageDataProvider = ... fun invalidateViews() { // Update message text view by `dataProvider` ґଘؔ܎ > ॏෳ > ਺चͭͳ͗ͷґଘ

Slide 44

Slide 44 text

ґଘͷॏෳ ਺चͭͳ͗ͷґଘ - ωετ͞Εͨɾ௚઀ࢀরͰͳ͍ґଘ ॏෳͨ͠ґଘؔ܎ͷηοτ - N:M ͷґଘ ґଘؔ܎ > ॏෳ > ॏෳͨ͠ґଘؔ܎ͷηοτ

Slide 45

Slide 45 text

ॏෳͨ͠ґଘؔ܎ͷηοτ ʮෳ਺ͷಉ͡Ϋϥεͷू߹ʹґଘ͢Δʯ͜ͱΛආ͚Δ MessageTextPresenter TimestampPresenter LocalMessageDataProvider RemoteMessageDataProvider ґଘؔ܎ > ॏෳ > ॏෳͨ͠ґଘؔ܎ͷηοτ

Slide 46

Slide 46 text

ॏෳͨ͠ґଘؔ܎ͷηοτ: Կ͕ʮΑ͘ͳ͍ʯ͔ ίʔυͷมߋʹରͯ͠੬ऑ - ґଘݩɾґଘઌʹΫϥεΛ௥Ճͨ͠৔߹ʹߋ৽Λ๨ΕΔՄೳੑ - ίʔυͷॏෳ͕ݪҼ ґଘؔ܎ > ॏෳ > ॏෳͨ͠ґଘؔ܎ͷηοτ

Slide 47

Slide 47 text

ॏෳͨ͠ґଘؔ܎ͷηοτ: मਖ਼ํ๏ ґଘઌΛ·ͱΊΔதؒϨΠϠΛ࡞੒͢Δ MessageTextPresenter TimestampPresenter LocalMessageDataProvider RemoteMessageDataProvider MessageDataProvider ґଘؔ܎ > ॏෳ > ॏෳͨ͠ґଘؔ܎ͷηοτ

Slide 48

Slide 48 text

ॏෳͨ͠ґଘؔ܎ͷηοτ: मਖ਼͢Δࡍͷ஫ҙ఺ ෆཁͳ͏ͪ͸தؒϨΠϠΛ࡞Βͳ͍ "YAGNI" ͱ "KISS" Λ৺͕͚Δ Ӆ͍ͯ͠Δ૚ΛݟͤΔʮτϯωϧʯΛ࡞Βͳ͍ MessageDataProvider ʹ public ͳ serverMessageDataProvider Λ ࡞Βͳ͍ ґଘؔ܎ > ॏෳ > ॏෳͨ͠ґଘؔ܎ͷηοτ

Slide 49

Slide 49 text

ґଘͷॏෳ: ·ͱΊ - ࢀরΛऔಘ͢ΔͨΊ͚ͩʹແؔ܎ͳΫϥεʹґଘ͠ͳ͍ - ґଘؔ܎ͷηοτ͕ॏෳͨ͠৔߹͸தؒϨΠϠΛ࡞Δ ґଘؔ܎ > ॏෳ > ·ͱΊ

Slide 50

Slide 50 text

ґଘؔ܎ IɾII ͷ಺༰ ґଘؔ܎ I: - ݁߹౓ ґଘؔ܎ II: - ํ޲ - ॏෳ - ໌ࣔੑ ґଘؔ܎ > ໌ࣔੑ

Slide 51

Slide 51 text

҉໧తͳґଘؔ܎ 1/3 Ϋϥεͷఆ͚ٛͩͰ͸ൃݟͰ͖ͳ͍ґଘؔ܎ interface Interface class Implementation : Interface class Caller(val interface: Interface) Caller ͸ Implementation ͷมߋͷӨڹΛड͚͏Δ Caller(Implementation()) ґଘؔ܎ > ໌ࣔੑ

Slide 52

Slide 52 text

҉໧తͳґଘؔ܎ 2/3 ΫϥεਤͰදݱ͞Εͳ͍ Caller Interface Implementation ґଘؔ܎ > ໌ࣔੑ

Slide 53

Slide 53 text

҉໧తͳґଘؔ܎ 3/3 ҉໧తͳґଘؔ܎Λආ͚ɺ໌ࣔతͳґଘؔ܎Λ࢖͏ ӨڹൣғΛΘ͔Γ΍͘͢͢Δ ʮऑ͍݁߹ʯͱ͸ҟͳΔ - ґଘΛऑͨͭ͘͠΋ΓͰɺ҉໧తʹͯ͠͸ͳΒͳ͍ ґଘؔ܎ > ໌ࣔੑ

Slide 54

Slide 54 text

҉໧తͳґଘؔ܎: ྫ - ա౓ͳந৅Խ - ҉໧తͳҾ਺ͷมҬ ґଘؔ܎ > ໌ࣔੑ

Slide 55

Slide 55 text

҉໧తͳґଘؔ܎: ྫ - ա౓ͳந৅Խ - ҉໧తͳҾ਺ͷมҬ ґଘؔ܎ > ໌ࣔੑ > ҉໧తͳมҬ

Slide 56

Slide 56 text

ա౓ͳந৅Խ ݺͼग़͠ଆ͕ࢠΫϥεʹ҉໧తʹґଘ͍ͯ͠Δ ProfilePresenter MessagePresenter StringProvider ProfileDataRepository MessageDataRepository ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 57

Slide 57 text

ա౓ͳந৅Խ: ʮΑ͘ͳ͍ʯྫ interface StringProvider { fun queryString(id: Int): String } class ProfileDataRepository : StringProvider { /** Returns user name of the given [userId] */ override fun queryString(userId: Int): String = ... } class ProfilePresenter(val nameProvider: StringProvider, ...) { fun updateProfileView(userId: Int) { userNameView.text = nameProvider.queryString(userId) ... ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 58

Slide 58 text

ա౓ͳந৅Խ: Կ͕ʮΑ͘ͳ͍ʯ͔ ॲཧͷྲྀΕΛ௥੻͢Δ͜ͱ͕ࠔ೉ ίϯετϥΫλͷݺͼग़͠ݩΛݟͳ͍ͱίʔυΛḷΕͳ͍ ؒҧͬͨΠϯελϯεΛ౉͢Մೳੑ͕͋Δ MessageDataRepository Λ౉ͯ͠΋ίʔυͱͯ͠͸༗ޮ ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 59

Slide 59 text

ա౓ͳந৅Խ: मਖ਼ํ๏ ෆཁͳܧঝؔ܎͸࡟আ͢Δ ਌ΫϥεɾΠϯλʔϑΣΠεΛ࡟আ͠ɺ௚઀ࢀর͢Δ ProfilePresenter MessagePresenter ProfileDataRepository MessageDataRepository ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 60

Slide 60 text

ա౓ͳந৅Խ: मਖ਼ྫ class ProfileDataRepository { fun queryUserName(userId: Int): String = ... } class ProfilePresenter(val repository: ProfileDataRepository, ...) { fun updateProfileView(userId: Int) { userNameView.text = repository.queryUserName(userId) ... ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 61

Slide 61 text

ա౓ͳந৅Խ: ஫ҙ͢Δ΂͖఺ 1/2 ܧঝΛ࢖͏໨తΛ໌֬ʹ͢Δ - ଟ૬ੑͷར༻ - ௚࿨ܕͷར༻: sealed class - ґଘੑٯస΍࣮૷ͷ෼཭: ϞδϡʔϧԽɾϥΠϒϥϦԽ ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 62

Slide 62 text

ա౓ͳந৅Խ: ஫ҙ͢Δ΂͖఺ 2/2 ίʔυͷڞ௨ԽͷͨΊ͚ͩʹܧঝΛ࢖Θͳ͍ - ू໿΍ίϯϙδγϣϯͷར༻Λݕ౼ ଟ૬ੑ͕໨తͷ৔߹ɺଞͷ࣮ݱํ๏΋ݕ౼͢Δ - ύϥϝτϦοΫଟ૬: δΣωϦΫε౳ - ΞυϗοΫଟ૬: ΦʔόʔϩʔυɾܕΫϥε౳ ґଘؔ܎ > ໌ࣔੑ > ա౓ͳந৅Խ

Slide 63

Slide 63 text

҉໧తͳґଘؔ܎: ྫ - ա౓ͳந৅Խ - ҉໧తͳҾ਺ͷมҬ ґଘؔ܎ > ໌ࣔੑ > ҉໧తͳมҬ

Slide 64

Slide 64 text

҉໧తͳҾ਺ͷมҬ: ʮΑ͘ͳ͍ʯྫ ໰୊: ҎԼͷίʔυͷʮΑ͘ͳ͍ʯ఺͸ʁ fun setViewBackgroundColor(colorString: String) { val colorCode = when(colorString) { "red" -> 0xFF0000 "green" -> 0x00FF00 else -> 0x000000 } view.setBackgroundColor(colorCode) } ґଘؔ܎ > ໌ࣔੑ > ҉໧తͳมҬ

Slide 65

Slide 65 text

҉໧తͳҾ਺ͷมҬ: Կ͕ʮΑ͘ͳ͍ʯ͔ ݺͼग़͠ݩɾઌ͕҉໧తͳ੍໿Ͱ݁͹Ε͍ͯΔ ༗ޮͳ࣮Ҿ਺͸Կ͔Λ஌Δඞཁ͕͋Δ "blue"ɾ"RED"ɾ"FF0000" ͸ແޮ ࢓༷ͷมߋʹରͯ͠੬ऑ ৭Λ௥Ճɾ࡟আͨ͠৔߹ʹݺͼग़͠ݩͷมߋ͕ඞཁ ґଘؔ܎ > ໌ࣔੑ > ҉໧తͳมҬ

Slide 66

Slide 66 text

҉໧తͳҾ਺ͷมҬ: मਖ਼ํ๏ มҬΛࣔͨ͢ΊͷϞσϧΛ࡞Δ enum class BackgroundColor(val colorCode: Int) { RED(0xFF0000), GREEN(0x00FF00) } fun setViewBackgroundColor(color: BackgroundColor) { view.setBackgroundColor(color.colorCode) } ґଘؔ܎ > ໌ࣔੑ > ҉໧తͳมҬ

Slide 67

Slide 67 text

ґଘؔ܎ͷ໌ࣔੑ: ·ͱΊ ໌ࣔతͳґଘؔ܎Λ࢖͏ - ΫϥεఆٛɾਤͰཧղͰ͖Δґଘؔ܎ʹ͢Δ - ʮऑ͍݁߹ʯͱࠞಉ͠ͳ͍ ґଘؔ܎Λ໌ࣔతʹ͢Δํ๏ྫ - ա౓ͳந৅ԽϨΠϠΛ࡟আ͢Δ - มҬΛ໌ࣔ͢ΔϞσϧΛ࡞Δ ґଘؔ܎ > ໌ࣔੑ > ·ͱΊ

Slide 68

Slide 68 text

·ͱΊ ɹ ݁߹౓: ಺༰ɾڞ௨ɾ֎෦ɾ੍ޚ݁߹Λ؇࿨͢Δ ํ޲: Ұํ޲ʹ͢Δɾ८ճΛখ͍͞ൣғʹ੍ݶ͢Δ ॏෳ: ਺चͭͳ͗ͷґଘ΍ηοτͷॏෳΛආ͚Δ ໌ࣔੑ: ΫϥεͷఆٛͰཧղͰ͖Δґଘؔ܎Λ࢖͏ ґଘؔ܎ > ·ͱΊ