JJUG CCC 2018 Fallでの発表資料です。
υϝΠϯۦಈઃܭͱSpring BootΛ׆༻ͨ͠ΞϓϦέʔγϣϯ։ൃCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
View Slide
ఆ͢ΔϦεφʔ• Spring BootΛ৮ͬͨ͜ͱ͕͋Δ• DDDʹ͍ͭͯฉ͍ͨ͜ͱ͕͋ΔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ࣗݾհ: @zhanpon• 201710݄ɿϠϑʔʹ৽ଔೖࣾ• 20184݄ɿJava, Spring BootΛ͍͡ΊΔ• 20185݄ɿJJUG CCC 2018 SpringʹॳࢀՃձࣾͰͷओͳ׆ಈ• ਪનγεςϜͷ։ൃɾӡ༻Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
DDDͱԿ͔• υϝΠϯۦಈઃܭ (Domain-Driven Design) ͷུশ• Eric Evans ͷ "Domain-Driven Design: Tackling Complexity in theHeart of Software" ͱ͍͏ຊ͕ݩʹͳ͍ͬͯΔ• ෯͍͕͋ͬͯҰݴͰઆ໌Ͱ͖ͳ͍Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
ʢࢲʹͱͬͯʣDDDͱԿ͔• ΦϒδΣΫτࢦϓϩάϥϛϯάΛݱ࣮ͷෳࡶͳγεςϜʹద༻͢ΔͨΊͷํ๏• SOLIDͳઃܭΛ࣮ݱ͢ΔͨΊͷσβΠϯύλʔϯʢ୯Ұͷݪଇɺ։์/ดͷݪଇ……ʣCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ΞτϥΠϯ1. DDDΛΔϞνϕʔγϣϯ2. DDDΛ࣮ફͨ͠ܦݧ3. ٕज़తͳTIPSCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
Part I: DDDΛΔϞνϕʔγϣϯCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ࣦഊஊ• ۀΞϓϦέʔγϣϯΛSpring BootͷνϡʔτϦΞϧͷԆͰ࣮ͨ͠ΒͻͲ͍͜ͱʹͳͬͨCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
Α͋͘ΔSpring BootͷνϡʔτϦΞϧ1. ΤϯςΟςΟΛ࣮͢Δ2. ϦϙδτϦΛఆٛ͢Δ3. ίϯτϩʔϥʔΛ࣮͢Δ4. ʂCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ΤϯςΟςΟΛ࣮͢Δ@Entitypublic class User {@Idprivate String id;private String fullName;// getterͱsetter}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
ϦϙδτϦΛఆٛ͢Δpublic interface UserRepository extends CrudRepository {}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
ίϯτϩʔϥʔΛ࣮͢Δ@RestControllerpublic class UserController {@AutowiredUserRepository userRepository;@GetMapping("/users")public List allUsers() {return userRepository.findAll();}}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
ʂ• ͋ͱ UserController ʹϩδοΫΛॻ͍͍͚ͯOK (?)Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
• UserΫϥεͷΧϓηϧԽʁ• UserController ͕ࡍݶͳ͘ෳࡶԽ͢Δ• ୯ମςετ͕ࠔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
υϝΠϯϞσϧශ݂• ୯ͳΔखଓ͖ܕઃܭʹͳͬͯΔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
Part II: DDDΛ࣮ફ࣮ͨ͠ྫCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ࣾͷϓϩδΣΫτ• ػցֶशͷՌΛຖࣗಈͰσϓϩΠ͍ͨ͠Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
φΠʔϒʹ࣮ͨ͠Β• ϦϙδτϦʹΞΫηε͢ΔΫϥε (DockerRegistryAccessor)ͱ࣮ߦڥʹσϓϩΠ͢ΔΫϥε (KubernetesDeployer) Λ༻ҙ͢Δ• DockerRegistryAccessor ͕࠷৽൛Λऔͬͯ͘Δ• KubernetesDeployer ͕ͦΕΛσϓϩΠ͢ΔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
φΠʔϒʹ࣮ͨ͠Β• ͱΓ࣮͋͑ͣͰ͖ͦ͏ɻ͔ͬ͠͠ͱෳࡶʹͳͬͨΒʁ• UserControllerͷΑ͏ʹͲΜͲΜෳࡶʹͳΔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
૿͑Δཁ݅• ࣗಈσϓϩΠ͢Δ࣌ؒଳΛ੍ݶ͍ͨ͠• ٳσϓϩΠΛېࢭ͍ͨ͠• ࠷৽൛͡Όͳͯ҆͘ఆ൛ΛσϓϩΠ͍ͨ͠Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
υϝΠϯϞσϧΛݟग़͢• ιϑτΣΞγεςϜͷ͏ͪɺ͕ࣗݩʑղ͖͔ͨͬͨΛදݱ͢ΔίʔυͷΊΔྔগͳ͍• ͦͷ෦͕WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫͳͲͷٕज़తৄࡉʹຒΕͳ͍Α͏ʹ͍ͨ͠• υϝΠϯ͕ٕज़తৄࡉʹґଘ͠ͳ͍Α͏ʹ͢Δ (DIP)Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
ࠓճͷυϝΠϯϞσϧCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
Version• ఆظతʹੜ͞ΕΔػցֶशͷՌɻྫɿݘೣྨثͷ201812݄159࣌όʔδϣϯ@Valuepublic class Version {private final String modelName;private final Instant instant;}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
VersionSet• SetͷϥούʔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
Policypublic enum Policy {NONE((versions, t) -> Optional.empty()),LATEST((versions, t) -> {return versions.latest();})private BiFunction> policy;Policy(BiFunction> policy) {this.policy = policy;}}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
VersionCatalogpublic interface VersionCatalog {VersionSet list(String modelName);}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
Deployerpublic interface Deployer {void deploy(Version version);}Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
༷มߋ• ػցֶशͷՌΛஷΊΔॴ͕Docker Registry͔ΒΦϒδΣΫτετϨʔδʹͳͬͨ!• VersionCatalog ͷ࣮ΫϥεΛม͑Δ͚ͩCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
DDDΛͬͯྑ͔ͬͨ͜ͱ• ༷มߋָ͕• ςετ͕͍͢͠• ࣗͷʹର͢Δཧղ͕ίʔυͱͯ͠දݱ͞ΕΔCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
࠷ޙʹͯ͢ͷιϑτΣΞγεςϜɺεςʔΫϗϧμʔʹ2ͭͷҟͳΔՁΛఏڙ͢ΔɻͦΕʮৼΔ͍ʯͱʮߏʯͰ͋Δɻ— Robert C. MartinCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
͓·͚Copyright © 2018 Yahoo Japan Corporation. All rights reserved.
Part III: ٕज़తͳTIPSCopyright © 2018 Yahoo Japan Corporation. All rights reserved.
ϓϩδΣΫτߏ• domainͱapplicationͱ͍͏2ͭͷGradleϓϩδΣΫτΛ࡞ͬͨ• domainJavaͷඪ४ϥΠϒϥϦʹ͔͠ґଘ͍ͯ͠ͳ͍• applicationdomainʹґଘ͍ͯ͠Δɻத;ͭ͏ͷSpring BootΞϓϦέʔγϣϯCopyright © 2018 Yahoo Japan Corporation. All rights reserved.