CleanArchitecture × Strategyパターンで挑む爆速開発

CleanArchitecture × Strategyパターンで挑む爆速開発

下記の課題により多くなりがちな議論を減らして、開発速度を上げた話
1. UIとDataの依存によるメンテナンス性の悪さ
2. 明確な設計指針不足に伴うコミュニケーションコストの増大
3. 設計の属人化

Agenda

1. CleanArchitectureを導入してみた話
2. CleanArchitectureでは解決できない部分が出てきた話
3. Strategyパターンを使うとうまく解決できた話
4. このパターンに残る課題の話

0dca282446cfed7fda8c7384917b90c5?s=128

KENTARO SATA

March 05, 2019
Tweet

Transcript

  1. CleanArchitecture × Strategyύλʔϯ Ͱ௅Ήര଎։ൃ Tech Lead / Android Engineer @SataKentaro

    (Ωϟϯϓͷ͑Μ͡ʹ͋)
  2. PROFILE AndroidΤϯδχΞ — FiNC Technologiesʹॴଐ — ίϛϡχςΟʔػೳΛ։ൃ͢ΔνʔϜͷTL — DroidKaigi2019ͰʮϚςϦΞϧσβΠϯͷىݯͱϕʔεͱͳΔ఩ֶʯͱ͍ ͏λΠτϧͰొஃ

    Ωϟϯύʔ — ฏۉ͢ΔͱҰ݄ʹ1ճҎ্͸ςϯτੜ׆ — ݱࡏ͸ݐஙՈͷ༑ਓͱςϯτΛσβΠϯத (https://twitter.com/ SataKentaro) ݐங — ֶੜ࣌୅͸ݐஙσβΠϯΛઐ߈ Kentaro Sata (Ωϟϯϓͷ͑Μ͡ʹ͋) AndroidΤϯδχΞ / Ωϟϯύʔ / ݐங
  3. $MFBO"SDIJUFDUVSFΛಋೖͯ͠Έͨ࿩ $MFBO"SDIJUFDUVSFͰ͸ղܾͰ͖ͳ͍෦෼͕ग़͖ͯͨ࿩ 4USBUFHZύλʔϯΛ࢖͏ͱ͏·͘ղܾͰ͖ͨ࿩ "HFOEB ͜ͷύλʔϯʹ࢒Δ՝୊ͷ࿩

  4. CleanArchitectureΛಋೖͯ͠Έͨ࿩ tried to use Clean Architecture - 01 -

  5. 6*ͱ%BUBͷґଘʹΑΔϝϯςφϯεੑͷѱ͞ ໌֬ͳઃܭࢦ਑ෆ଍ʹ൐͏ίϛϡχέʔγϣϯίετͷ૿େ ઃܭͷଐਓԽ $MFBO"SDIJUFDUVSFಋೖલͷ՝୊

  6. 6*ͱ%BUBͷґଘʹΑΔϝϯςφϯεੑͷѱ͞ ໌֬ͳઃܭࢦ਑ෆ଍ʹ൐͏ίϛϡχέʔγϣϯίετͷ૿େ ઃܭͷଐਓԽ $MFBO"SDIJUFDUVSFಋೖલͷ՝୊ ։ൃલͷٞ࿦૿େɻ։ൃεϐʔυരԼ͕Γ

  7. ٞ࿦ΛݮΒͯ͠։ൃεϐʔυΛ্͍͛ͨ

  8. ےτϨͰղܾ͠Α͏͔ ࢀরݩIUUQTBNFCMPKQCBEBTTDFP

  9. ͍΍ɺ΋ͬͱ͍͍ͷ͕͋Δʂ ࢀরݩIUUQTCMPHDMFBODPEFSDPNVODMFCPCUIFDMFBOBSDIJUFDUVSFIUNM

  10. 6TF$BTF 3FQPTJUPSZ %BUB4UPSF 7JFX 7JFX.PEFM 6* %PNBJO %BUB 1SFTFOUFS ૚ʹ෼͚ͨ

  11. ઃܭํ਑͕໌֬ʹͳΓνʔϜͰͷٞ࿦͕ݮͬͨ ݸਓͷϨϕϧࠩʹΑΔ৺഑͕͔ͳΓݮͬͯϨϏϡʔίετ
 ɹ͕Լ͕ͬͨ 6*ͱ%BUBͷґଘΛണ͕ͤͯ%BUB૚ͷมߋʹڧ͘ͳͬͯ
 ɹαʔόʔͱͷ"1*ઃܭٞ࿦͕ݮͬͨ

  12. CleanArchitectureͰ͸ղܾͰ͖ͳ͍෦෼͕ग़͖ͯͨ࿩ What the Clean Architecture didn’t solve - 02 -

  13. (SPVQνϟοτͱ%JSFDUνϟοτΛผϦιʔεͱͯ͠ѻ͏ 6*͸(SPVQνϟοτͱ͔%JSFDUνϟοτؔ܎ͳ͘ҰͭͰ ͱ͋Δνϟοτͷ࡞Γ௚͠։ൃ

  14. %BUB4UPSF 3FQPTJUPSZ (SPVQ$IBU3FNPUF%BUB4UPSF (SPVQ$IBU3FQPTJUPSZ 6TFS$IBU3FQPTJUPSZ 6TF$BTF $IBU3PPN6TF$BTF (SPVQ$IBU-PDBM%BUB4UPSF 6TFS$IBU3FNPUF%BUB4UPSF 6TFS$IBU-PDBM%BUB4UPSF

    6* %BUB ͜Μͳײ͡ʹ։ൃ͠Α͏ͱࢥͬͨ
  15. ͢Έ·ͤΜɻҰͭ໧͍ͬͯͨ͜ͱ͕͋Γ·͢ɻ

  16. ͢Έ·ͤΜɻҰͭ໧͍ͬͯͨ͜ͱ͕͋Γ·͢ɻ (SPVQνϟοτͱ%JSFDUνϟοτΛผϦιʔεͱͯ͠ѻ͏ 6*͸(SPVQνϟοτͱ͔%JSFDUνϟοτؔ܎ͳ͘ҰͭͰ αʔόʔଆͰνϟοτ͸΋ͷ͘͢͝৭Μͳ֓೦Ͱࡉ͔͘
 ɹϦιʔε͕෼͔Ε͍ͯ·͢ɻɻɻ

  17. ֓೦ͷύλʔϯ͸͜Μͳײ͡

  18. Ͱ΋νϟοτ3PPNͷϦιʔεΛҰ୴औಘͯ͠͠·͑͹ ΫϥΠΞϯτͱͯ͠දݱ͢΂͖֓೦͸͜Ε͚ͩ

  19. ͳʹ΍Β$BTFจ·ΈΕͷ6TF$BTFʹ

  20. ͔͠΋3PPNऔಘͷϝιουͱ3PPNऔಘޙʹ࢖͏ ϝιουͰ$BTFจͷύλʔϯ͕ҧ͏

  21. StrategyύλʔϯΛ࢖͏ͱ͏·͘ղܾͰ͖ͨ࿩ solved this with Strategy Pattern - 03 -

  22. ඞཁͳͷ͸૚͚ͩͱ͸ݶΒͳ͍

  23. ࠓճղܾ͍ͨ͜͠ͱ

  24. ےτϨͰղܾ͠Α͏͔ ࢀরݩIUUQTBNFCMPKQCBEBTTDFP

  25. ͍΍ɺ΋ͬͱ͍͍ͷ͕͋Δʂ ࢀরݩIUUQTXXXUFDITDPSFDPNUFDI%FTJHO1BUUFSO4USBUFHZIUNM

  26. σʔλΛॳظऔಘ͢Δ࣌ʹ࢖͏3FQPTJUPSZͱϝιου σʔλऔಘޙʹ࢖͏3FQPTPUSZͱϝιου ։͍ͨͱ͖ʹ࣍ͷ̎ͭͷ૊Έ߹ΘͤΛܾఆ͍ͨ͠

  27. σʔλΛॳظऔಘ͢Δ࣌ʹ࢖͏3FQPTJUPSZͱϝιου σʔλऔಘޙʹ࢖͏3FQPTPUSZͱϝιου ඞཁͳ4USBUFHZ͸̎ͭ 0QFO$IBU3PPN4USBUFHZ 0QFOFE$IBU3PPN4USBUFHZ

  28. औಘʹ࢖͏*%ͷछྨͱ3FQPTJUPSZͱϝιουΛࢦఆͯ͠ 0QFO$IBU3PPN4USBUFHZ

  29. औಘޙʹ࢖͏ಛఆͷ0QFOFE$IBU3PPN4USBUFHZΛࢦఆ͢Δ 0QFO$IBU3PPN4USBUFHZ

  30. ͋ͱ͸֤$BTFͷύλʔϯΛ4USBUFHZʹஔ͖׵͑Δ͚ͩ 0QFO$IBU3PPN4USBUFHZ 0QFO6TFS$IBU3PPN4USBUFHZ 0QFO"ENJO$IBU3PPN4USBUFHZ 0QFO0GGJDJBM"DDPVOU$IBU3PPN4USBUFHZ 0QFO(SPVQ$IBU3PPN4USBUFHZ $SFBUF6TFS$IBU3PPN4USBUFHZ $SFBUF"ENJO$IBU3PPN4USBUFHZ ʜ 0QFOFE$IBU3PPN4USBUFHZ

    0QFOFE6TFS$IBU3PPN4USBUFHZ 0QFOFE"ENJO$IBU3PPN4USBUFHZ 0QFOFE0GGJDJBM"DDPVOU$IBU3PPN4USBUFHZ 0QFOFE(SPVQ$IBU3PPN4USBUFHZ
  31. εοΩϦ

  32. ͜ͷύλʔϯʹ࢒Δ՝୊ͷ࿩ What even Strategy Pattern doesn’t solve - 04 -

  33. %*ͣ͠Β͍ʂʂʂ

  34. ౰વ6TF$BTF4USBUFHZͰ͸ͳ͍ͷͰ %BHHFSͱ͔ͷ%*ίϯςφͰͷࢦఆํ๏Λ͏·͘ݟ͚ͭΒΕͯͳ͍

  35. ઈࢍղܾํ๏ืूத

  36. ͝੩ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Kentaro Sata - THANK YOU -