下記の課題により多くなりがちな議論を減らして、開発速度を上げた話 1. UIとDataの依存によるメンテナンス性の悪さ 2. 明確な設計指針不足に伴うコミュニケーションコストの増大 3. 設計の属人化
Agenda
1. CleanArchitectureを導入してみた話 2. CleanArchitectureでは解決できない部分が出てきた話 3. Strategyパターンを使うとうまく解決できた話 4. このパターンに残る課題の話
CleanArchitecture × StrategyύλʔϯͰΉര։ൃTech Lead / Android Engineer@SataKentaro (Ωϟϯϓͷ͑Μ͡ʹ͋)
View Slide
PROFILEAndroidΤϯδχΞ— FiNC Technologiesʹॴଐ— ίϛϡχςΟʔػೳΛ։ൃ͢ΔνʔϜͷTL— DroidKaigi2019ͰʮϚςϦΞϧσβΠϯͷىݯͱϕʔεͱͳΔֶʯͱ͍͏λΠτϧͰొஃΩϟϯύʔ— ฏۉ͢ΔͱҰ݄ʹ1ճҎ্ςϯτੜ׆— ݱࡏݐஙՈͷ༑ਓͱςϯτΛσβΠϯத (https://twitter.com/SataKentaro)ݐங— ֶੜ࣌ݐஙσβΠϯΛઐ߈Kentaro Sata (Ωϟϯϓͷ͑Μ͡ʹ͋)AndroidΤϯδχΞ / Ωϟϯύʔ / ݐங
$MFBO"SDIJUFDUVSFΛಋೖͯ͠Έͨ$MFBO"SDIJUFDUVSFͰղܾͰ͖ͳ͍෦͕ग़͖ͯͨ4USBUFHZύλʔϯΛ͏ͱ͏·͘ղܾͰ͖ͨ"HFOEB͜ͷύλʔϯʹΔ՝ͷ
CleanArchitectureΛಋೖͯ͠Έͨtried to use Clean Architecture- 01 -
6*ͱ%BUBͷґଘʹΑΔϝϯςφϯεੑͷѱ͞໌֬ͳઃܭࢦෆʹ͏ίϛϡχέʔγϣϯίετͷ૿େઃܭͷଐਓԽ$MFBO"SDIJUFDUVSFಋೖલͷ՝
6*ͱ%BUBͷґଘʹΑΔϝϯςφϯεੑͷѱ͞໌֬ͳઃܭࢦෆʹ͏ίϛϡχέʔγϣϯίετͷ૿େઃܭͷଐਓԽ$MFBO"SDIJUFDUVSFಋೖલͷ՝։ൃલͷٞ૿େɻ։ൃεϐʔυരԼ͕Γ
ٞΛݮΒͯ͠։ൃεϐʔυΛ্͍͛ͨ
ےτϨͰղܾ͠Α͏͔ࢀরݩIUUQTBNFCMPKQCBEBTTDFP
͍ɺͬͱ͍͍ͷ͕͋ΔʂࢀরݩIUUQTCMPHDMFBODPEFSDPNVODMFCPCUIFDMFBOBSDIJUFDUVSFIUNM
6TF$BTF 3FQPTJUPSZ %BUB4UPSF7JFX 7JFX.PEFM6* %PNBJO %BUB1SFTFOUFSʹ͚ͨ
ઃܭํ͕໌֬ʹͳΓνʔϜͰͷ͕ٞݮͬͨݸਓͷϨϕϧࠩʹΑΔ৺͕͔ͳΓݮͬͯϨϏϡʔίετ ɹ͕Լ͕ͬͨ6*ͱ%BUBͷґଘΛണ͕ͤͯ%BUBͷมߋʹڧ͘ͳͬͯ ɹαʔόʔͱͷ"1*ઃܭ͕ٞݮͬͨ
CleanArchitectureͰղܾͰ͖ͳ͍෦͕ग़͖ͯͨWhat the Clean Architecture didn’t solve- 02 -
(SPVQνϟοτͱ%JSFDUνϟοτΛผϦιʔεͱͯ͠ѻ͏6*(SPVQνϟοτͱ͔%JSFDUνϟοτؔͳ͘ҰͭͰͱ͋Δνϟοτͷ࡞Γ͠։ൃ
%BUB4UPSF3FQPTJUPSZ(SPVQ$IBU3FNPUF%BUB4UPSF(SPVQ$IBU3FQPTJUPSZ6TFS$IBU3FQPTJUPSZ6TF$BTF$IBU3PPN6TF$BTF(SPVQ$IBU-PDBM%BUB4UPSF6TFS$IBU3FNPUF%BUB4UPSF6TFS$IBU-PDBM%BUB4UPSF6* %BUB͜Μͳײ͡ʹ։ൃ͠Α͏ͱࢥͬͨ
͢Έ·ͤΜɻҰ͍ͭͬͯͨ͜ͱ͕͋Γ·͢ɻ
͢Έ·ͤΜɻҰ͍ͭͬͯͨ͜ͱ͕͋Γ·͢ɻ(SPVQνϟοτͱ%JSFDUνϟοτΛผϦιʔεͱͯ͠ѻ͏6*(SPVQνϟοτͱ͔%JSFDUνϟοτؔͳ͘ҰͭͰαʔόʔଆͰνϟοτͷ͘͢͝৭Μͳ֓೦Ͱࡉ͔͘ ɹϦιʔε͕͔Ε͍ͯ·͢ɻɻɻ
֓೦ͷύλʔϯ͜Μͳײ͡
Ͱνϟοτ3PPNͷϦιʔεΛҰ୴औಘͯ͠͠·͑ΫϥΠΞϯτͱͯ͠දݱ͖֓͢೦͜Ε͚ͩ
ͳʹΒ$BTFจ·ΈΕͷ6TF$BTFʹ
͔͠3PPNऔಘͷϝιουͱ3PPNऔಘޙʹ͏ϝιουͰ$BTFจͷύλʔϯ͕ҧ͏
StrategyύλʔϯΛ͏ͱ͏·͘ղܾͰ͖ͨsolved this with Strategy Pattern- 03 -
ඞཁͳͷ͚ͩͱݶΒͳ͍
ࠓճղܾ͍ͨ͜͠ͱ
͍ɺͬͱ͍͍ͷ͕͋ΔʂࢀরݩIUUQTXXXUFDITDPSFDPNUFDI%FTJHO1BUUFSO4USBUFHZIUNM
σʔλΛॳظऔಘ͢Δ࣌ʹ͏3FQPTJUPSZͱϝιουσʔλऔಘޙʹ͏3FQPTPUSZͱϝιου։͍ͨͱ͖ʹ࣍ͷ̎ͭͷΈ߹ΘͤΛܾఆ͍ͨ͠
σʔλΛॳظऔಘ͢Δ࣌ʹ͏3FQPTJUPSZͱϝιουσʔλऔಘޙʹ͏3FQPTPUSZͱϝιουඞཁͳ4USBUFHZ̎ͭ0QFO$IBU3PPN4USBUFHZ0QFOFE$IBU3PPN4USBUFHZ
औಘʹ͏*%ͷछྨͱ3FQPTJUPSZͱϝιουΛࢦఆͯ͠0QFO$IBU3PPN4USBUFHZ
औಘޙʹ͏ಛఆͷ0QFOFE$IBU3PPN4USBUFHZΛࢦఆ͢Δ0QFO$IBU3PPN4USBUFHZ
͋ͱ֤$BTFͷύλʔϯΛ4USBUFHZʹஔ͖͑Δ͚ͩ0QFO$IBU3PPN4USBUFHZ0QFO6TFS$IBU3PPN4USBUFHZ0QFO"ENJO$IBU3PPN4USBUFHZ0QFO0GGJDJBM"DDPVOU$IBU3PPN4USBUFHZ0QFO(SPVQ$IBU3PPN4USBUFHZ$SFBUF6TFS$IBU3PPN4USBUFHZ$SFBUF"ENJO$IBU3PPN4USBUFHZʜ0QFOFE$IBU3PPN4USBUFHZ0QFOFE6TFS$IBU3PPN4USBUFHZ0QFOFE"ENJO$IBU3PPN4USBUFHZ0QFOFE0GGJDJBM"DDPVOU$IBU3PPN4USBUFHZ0QFOFE(SPVQ$IBU3PPN4USBUFHZ
εοΩϦ
͜ͷύλʔϯʹΔ՝ͷWhat even Strategy Pattern doesn’t solve- 04 -
%*ͣ͠Β͍ʂʂʂ
વ6TF$BTF4USBUFHZͰͳ͍ͷͰ%BHHFSͱ͔ͷ%*ίϯςφͰͷࢦఆํ๏Λ͏·͘ݟ͚ͭΒΕͯͳ͍
ઈࢍղܾํ๏ืूத
͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠Kentaro Sata- THANK YOU -