Slide 1

Slide 1 text

υϝΠϯۦಈઃܭΛ ܰշʹ࣮ફ͢ΔͨΊ ͷ޻෉ 2016/3/4 ؔ੢DDD.java @haljik

Slide 2

Slide 2 text

ࣗݾ঺հ Տ্ ੖࢘(͔Θ͔Έ ͍ͤ͡ʣ @haljik ϑϦʔϥϯεJavaΤϯδχΞ 4 ؔ੢DDD.javaओ࠵ 4 ؔ੢JavaΤϯδχΞͷձϝϯόʔ 4 DDDΞϥΠΞϯεൃىਓϝϯόʔ

Slide 3

Slide 3 text

ࠓ೔࿩͢͜ͱ 4 ॏް͞ͱܰշ͞ 4 Ϟσϧ΁ͷϑΟʔυόοΫɾϧʔϓ 4 ϚΠϒʔϜ 4 ࠷ۙͷ՝୊

Slide 4

Slide 4 text

ࠓ೔࿩͞"ͳ͍"͜ͱ 4 ϓϩδΣΫτॳظͷ׆ಈ ͓͓Αͦͷۀ຿Πϝʔδ΍ɺγεςϜͷશମ ૾ɺࠎ֨ͱͳΔ༻ޠ͸ΠϯϓοτࡁΈͰɺ ͋Δఔ౓ͷू໿ϧʔτ͕ݟ͍͑ͯΔ͙Β͍ͷঢ় ଶΛલఏͱ͓ͯ͠ฉ͖͍ͩ͘͞ɻ

Slide 5

Slide 5 text

എܠ 4 WebΞϓϦέʔγϣϯ։ൃ 4 Java 4 Spring Boot 4 Thymeleaf 4 MyBatis H2database & PostgreSQL 4 ։ൃϝϯόʔ͸࠷େͰ΋10ਓ͙Β͍ͷن໛ײ

Slide 6

Slide 6 text

ࢲ͕ࢥ͏ॏް͞ 4 ϞσϧਤΛ͔ͬ͠Γॻ͘ 4 ৗʹϞσϧਤΛߋ৽͢Δ 4 ϞσϧਤͰυϝΠϯΤΩεύʔτͱձ࿩

Slide 7

Slide 7 text

ॏް͞ͷ໰୊ 4 ϞσϧਤͰձ࿩ͯ͘͠ΕΔυϝΠϯΤΩεύʔ τ͍ͬͯΔͷ? 4 ී௨υϝΠϯΤΩεύʔτͬͯ๩͍͠ਓͩΑ Ͷ? 4 ͦ΋ͦ΋υϝΠϯΤΩεύʔτ͕͍ͳ͍ 4 ϞσϧਤΛৗʹ࠷৽ʹߋ৽͢Δ࣌ؒ͋ΔͳΒί ʔυॻ͖͍ͨ

Slide 8

Slide 8 text

ࢲ͕ࢥ͏ܰշ͞ 4 ݪଇίʔυϑΝʔετ 4 ϞσϧਤΛؚΉυΩϡϝϯτྨ͸εφοϓγϣ οτͱͯ͠ॻ͘͜ͱ͸͋Δ 4 υϝΠϯΤΩεύʔτΛ଴ͨͳ͍ 4 ސ٬ɺར༻ऀ͔ΒͷϑΟʔυόοΫ͸ಈ͘UI͔ ΒͰྑ͠ͱ͢Δ

Slide 9

Slide 9 text

ཁ͸ϞσϧΛચ࿅͍ͤͯ͞ ͨ͘Ίͷૉૣ͍ϑΟʔυό οΫϧʔϓΛͲͷΑ͏ʹߏங ͢Δͷ͔ 4 ࣗ෼ୡͰճͤΔϧʔϓ͸ࣗ෼ୡͰճ͢ 4 ૣ͘খ͘͞ճ͢

Slide 10

Slide 10 text

۩ମతʹͲ͏͍ͯ͠Δ͔

Slide 11

Slide 11 text

ϑΟʔυόοΫɾϧʔϓΛ ࢧ͑Δ׆ಈͷશମ૾

Slide 12

Slide 12 text

No content

Slide 13

Slide 13 text

ྫɿ৽͍͠ू໿ϧʔτͱ͠ ͯʮར༻ऀʯΛ௥Ճ͢Δ

Slide 14

Slide 14 text

લఏͱͳ͍ͬͯΔ։ൃελΠϧ 4 ू໿ϧʔτ͕։ൃͷجຊ୯Ґ 4 ू໿ϧʔτʹରͯ͠Ϣʔεέʔε͕͋Δ 4 ྫ͑͹ར༻ऀͩͱɺ৽نొ࿥ɺϓϩϑΟʔ ϧมߋ etc.

Slide 15

Slide 15 text

1. ू໿ϧʔτͷ࣮૷ 4 ू໿ͱͦͷID͙Β͍ public class User { UserId id; } public class UserId { String value; }

Slide 16

Slide 16 text

2. ϢʔεέʔεͷςετΛॻ͘ @Autowired UserRegisterService service; def "ར༻ऀΞΧ΢ϯτͷ৽نొ࿥"() { given: def newUser = new User(); when: "ొ࿥͢Δ" service.register(newUser); then: "ొ࿥Ͱ͖Δ" noExceptionThrown(); }

Slide 17

Slide 17 text

3. ϢʔεέʔεΛ࣮૷͢Δ @Service public class UserRegisterService { @Autowired UserRepository repository; public void register(User user) { repository.register(user); } }

Slide 18

Slide 18 text

4. σʔλιʔεͷ࣮૷ public interface UserRepository { void register(User user); } @Repository public class UserDataSource implements UserRepository { //...ུ }

Slide 19

Slide 19 text

5. ϓϨθϯςʔγϣϯͷ࣮૷ @Controller public class UserRegisterController { //ొ࿥ը໘ͷදࣔ //ొ࿥ }

Ϣʔβʔొ࿥

Slide 20

Slide 20 text

͜ͷঢ়ଶͰ͸εοΧ εΧʹݟ͑Δ…

Slide 21

Slide 21 text

ͦΕͰ΋࠷ॳʹ͜ͷ ঢ়ଶͰಈ͔͢͜ͱΛ ໨ࢦ͢

Slide 22

Slide 22 text

ͦͯ͜͠ͷʮಈ͘ঢ়ଶʯΛ ʮҡ࣋ʯ͠ͳ͕Β2ʙ5·ͰΛ܁Γฦ͢

Slide 23

Slide 23 text

ʮಈ͔ͳ͍ঢ়ଶʯ = ϑΟʔυόοΫ·Ͱ͕௕͍

Slide 24

Slide 24 text

ʮಈ͘ঢ়ଶʯ = ϑΟʔυόοΫ·Ͱ͕୹͍

Slide 25

Slide 25 text

ಘΒΕΔϑΟʔυόοΫ

Slide 26

Slide 26 text

1. ू໿ϧʔτͷ࣮૷ 4 ͜ͷ࣌఺Ͱ͸ͳʹ΋ϑΟʔυόοΫ͕ͳ͍ɻ

Slide 27

Slide 27 text

2. ςετΛॻ͘ 4 ॳճͷϑΟʔυόοΫ͸΄΅ͳ͍ 4 Ϣʔεέʔεͷҙຯ͕ϝιου໊ʹݱΕΔ͔ʁ ͱ͔ 4 Πϯελϯεੜ੒͸newͰྑ͍Μ͚ͩͬʁԿ͕ ඞཁʹͳΔΜ͚ͩͬʁ ͱ͔࣮૷ͷࢦ਑Έ͍ͨͳؾ͖ͮ͸݁ߏ͋Δ

Slide 28

Slide 28 text

3. ϢʔεέʔεΛ࣮૷ 4 ॳճͷϑΟʔυόοΫ͸΄΅ͳ͍ 4 ͜͜ͰϞσϧͷ࢖͍উख͕Θ͔Δ 4 Ϣʔεέʔε͕ෳࡶԽͯ͘͠Δͱۀ຿஌͕ࣝᷓ Εग़ͯ͠·͏ࣄ͕ଟ͍

Slide 29

Slide 29 text

4. σʔλɾιʔε૚ͷ࣮૷ 4 DB͔ΒͷϑΟʔυόοΫ 4 ͜͜΋࠷ॳ͸ϑΟʔυόοΫ͸ͳ͍ 4 Կ͔͋Δ৔߹͸ϞσϧʹͱͬͯϚΠφεͷϑ ΟʔυόοΫʹͳΓ͕ͪ... 4 Ͱ΋σʔλͷϥΠϑαΠΫϧΛͲ͏͢ΔΜ ͚ͩͬʁͱ͔ͦ͏͍͏ؾ෇͖͸͋Δ

Slide 30

Slide 30 text

5. ϓϨθϯςʔγϣϯ૚ͷ࣮૷ 4 UI͔ΒͷϑΟʔυόοΫ 4 ࠷ॳͷঢ়ଶͰ͸ͦΜͳʹϑΟʔυόοΫ͸ ͳ͍ 4 Ϟσϧʹߏ଄͕ग़ͯ͘ΔͱɺͦΕΛHTML ʹ൓өͤ͞Δͱ͖ʹҧ࿨ײΛײͨ͡Γ 4 ϓϩάϥϚʔҎ֎ͷਓ͔ΒϑΟʔυόοΫ ͕΋Β͑Δ <-ॏཁ

Slide 31

Slide 31 text

ίʔυ͔Β͸ಘΒΕͳ͍΋ͷ 4 ू໿Λލ͙၆ᛌࢹ఺͔Βͷҧ࿨ײ΍ෆ੔߹ ※ਂ͍Ϟσϧʹ౸ୡ͢Δʹ͸ඞཁʹࢥ͑Δ ͜͜͸໛ࡧத 4 શମΛ௨͢γφϦΦςετΛॻ͍͓ͯ͘ͱ͔ 4 Ϗϧυ͢ΔͱԿ͔ਤΛੜ੒͢Δͱ͔

Slide 32

Slide 32 text

ॏཁͳ͜ͱ

Slide 33

Slide 33 text

ϓϩάϥϚʔҎ֎ͷਓ͔Β ϑΟʔυόοΫ͕΋Β͑Δঢ়ଶΛ ૣ͘࡞ͬͯҡ࣋͢Δࣄ

Slide 34

Slide 34 text

࠷ॳ͸ශ݂঱Ͱ΋ྑ͍ ࿙ΕͰͨۀ຿஌ࣝΛޙ͔ΒͰ΋ υϝΠϯϞσϧʹ໭ͤΔΑ͏ʹ࡞Δ

Slide 35

Slide 35 text

։ൃऀ͸ۀ຿஌ࣝΛϞσϧ ʹڽू͍ͤͯ͘͞աఔͰͦ ͷυϝΠϯʹର͢ΔཧղΛ ਂΊΔ

Slide 36

Slide 36 text

ͦΕ͕ਂ͍Ϟσϧ΁ͷ଍͕ ͔ΓʹͳΔ

Slide 37

Slide 37 text

ؓ࿩ٳ୊

Slide 38

Slide 38 text

ϚΠϒʔϜ(ࢮޠ?)

Slide 39

Slide 39 text

ෳ਺ͷू໿Λࢀর͢Δू໿ϧʔτͷ෮ݩ

Slide 40

Slide 40 text

ྫ͑͹ ޏ༻อݥՃೖ৚݅ͱ͍͏ू໿ϧʔτΛ෮ݩ͍ͨ͠ 4 Ұिؒͷबۀ͕࣌ؒ߹ܭ20࣌ؒҎ্ 4 Ұϲ݄ͷबۀ͕࣌ؒ߹ܭ87࣌ؒҎ্ 4 बۀظ͕ؒ31೔Ҏ্ 4 னֶؒੜͰ͸ͳ͍ 4 ޏ༻։࢝࣌఺Ͱ65ࡀະຬ

Slide 41

Slide 41 text

ඞཁͳଞͷू໿ * ඃޏ༻ऀͷۈ຿৚݅ Ұिؒ͋ͨΓͷबۀ࣌ؒ Ұϲ݄͋ͨΓͷबۀ࣌ؒ * ඃޏ༻ऀͷݸਓ৘ใ னֶؒੜ͔Ͳ͏͔ ೥ྸ

Slide 42

Slide 42 text

Ͳ͏͍͏࣮૷͕ߟ͑ΒΕΔ͔ʁ 1. ΞϓϦέʔγϣϯαʔϏεͰ ଞͷू໿ͷαʔϏεΛݺͿʁ 2. ޏ༻อݥՃೖ৚݅ͷϦϙδτϦͰ ଞͷू໿ͷϦϙδτϦΛݺͿʁ 3. SQLͰ·ͱΊͯऔͬͯ͘Δʁ

Slide 43

Slide 43 text

࠷ۙ͸1 4 ΍͸Γू໿ͷϑΝαʔυ͸ΞϓϦέʔγϣϯα ʔϏεʹͳ͍ͬͯΔͷ͕ࣗવʹײ͡Δ 4 ࢀর͍ͯ͠Δू໿͕ޙ͔ΒผίϯςΩετڥք ͷ΋ͷͰ͋Δࣄ͕Θ͔ͬͯผϓϩηεͰಈ࡞͢ ΔαʔϏεͱͳΔՄೳੑ͕͋Δ఺

Slide 44

Slide 44 text

ू໿ϧʔτΛ෦෼ߋ৽͢ΔࡍͷӬଓԽ

Slide 45

Slide 45 text

େମ͸ू໿ͷҰ෦͚ͩͷߋ ৽ཁ͕݅ൃੜ͢Δ ͍ΘΏΔλεΫϕʔεUI͸ݦஶʹͦ͏ͳΔɻ ू໿ϧʔτ͕࣋ͭάϩʔόϧͳࣝผࢠΛม͑Δ͜ ͱͳ͘ɺ ഑ԼͷΤϯςΟςΟ͚ͩΛߋ৽͢Δτϥ ϯβΫγϣϯΛߦ͏έʔε͕ଟ͍

Slide 46

Slide 46 text

Ͳ͏͍͏࣮૷͕ߟ͑ΒΕΔ͔ʁ 1. ৗʹ·Δ͝ͱӬଓԽ͢Δʁ 2. ߋ৽͢Δ෦෼͚ͩͷߋ৽ґཔʢ̋̋RequestΦ ϒδΣΫτʣΛ࡞Δʁ 3. ू໿͔ΒDomainEventΛൃߦͯ͠Subscriber ͕ӬଓԽʁ

Slide 47

Slide 47 text

৔߹ʹΑΓҧ͏͚Ͳେମ̎ 4 ·Δ͝ͱӬଓԽ 4 DataSourceʹ౉ͨ࣌͠఺Ͱ෦෼ߋ৽Ͱ͋ Δ͜ͱͷจ຺͕ࣦΘΕ͕ͪ 4 DomainEvent 4 ໌ࣔతͳϏδωεϓϩηε͕ΠϕϯτΛܦ ༝͢Δ͜ͱͰӅΕͯ͠·͍ͦ͏ 4 Ͱ΋ΦϒδΣΫτࢦ޲తʹ͸ʮ໰͍߹Θͤ Δͳ໋͡Ζʯ͕Ͱ͖ͦ͏Ͱ΍ͬͯΈ͍ͨ

Slide 48

Slide 48 text

2ͷ࣮૷ྫ ར༻ऀϞσϧ public class User { //ར༻ऀ UserId id; ... Profile profile; //ݸਓ৘ใ ResponsibleArea area; //୲౰ΤϦΞ }

Slide 49

Slide 49 text

2ͷ࣮૷ྫ(ଓ͖) ݸਓ৘ใߋ৽࣌ͷґཔΦϒδΣΫτ public class ProfileUpdateRequest { User old; //ू໿ϧʔτΛ๊͑ͯ͠·͏ Profile update; } ୲౰ΤϦΞߋ৽࣌ͷґཔΦϒδΣΫτ public class ResponsibleAreaUpdateRequest { User old; //ू໿ϧʔτΛ๊͑ͯ͠·͏ ResponsibleArea area; }

Slide 50

Slide 50 text

2ͷ࣮૷ྫ(ଓ͖) ར༻ऀαʔϏε @Service public UserRegisterService { @Autowired UserRepository repository; public void register(User user) { repository.register(user); //ొ࿥͸·Δͬͱ } public void updateProfile(ProfileUpdateRequest request) { repository.register(request); //ϦϙδτϦ͸ΠϕϯτͷੵΈ্͛ } public void updateResponsibleArea(ResponsibleAreaRequest request) { repository.register(request); //ϦϙδτϦ͸ΠϕϯτͷੵΈ্͛ } }

Slide 51

Slide 51 text

2ͷ࣮૷ྫ(ଓ͖) σʔλϕʔε

Slide 52

Slide 52 text

No content

Slide 53

Slide 53 text

2ͷ࣮૷ྫ(ଓ͖) Πϛϡʔλϒϧσʔλ 4 Πϕϯτσʔλ͸ॻ͖׵͑ͳ͍ 4 ࠷৽Ϩίʔυͷ؅ཧ͚ͩΛߦ͏ ར఺ 4 ӨڹൣғͷہॴԽ 4 τϥϯβΫγϣϯʹཔΒͳͯ͘ྑ͍

Slide 54

Slide 54 text

1:N໰୊ͷղ͖ํ ྫɿٻਓ(1)ʹඥͮ͘஍Ҭ(N)͕͋Δ৔߹ʹɺٻਓ ҰཡΛऔಘ͢Δɻ 1. SQLͰjoinͯ͠MyBatisͷResultMapͳͲͰ ্ख͘ٵऩͯ͠औಘ͢Δ 2. JavaଆͰผ్औಘͯ͠ޙ͔ΒJoin͢Δɻ

Slide 55

Slide 55 text

࠷ۙ͸ՄೳͰ͋Ε͹2 4 StreamAPIͷԸܙͰผʑʹऔಘ & GroupingBy & Ϛʔδ ͕؆୯ 4 Ͱ΋ϝϞϦޮ཰͸ѱ͍ͷͰStreamΛฦͯ͘͠ ΕΔDomaʹ΋஫໨͍ͯ͠Δ

Slide 56

Slide 56 text

ೖྗ஋ͷλΠϓϛεϚον໰୊ ྫ: ಺෦ܕ͕IntegerͳͲ਺஋ܕͰ͋Δ৔߹ 4 ߲໨୯ҐͷόϦϡʔΦϒδΣΫτͷ಺෦ܕΛจ ࣈྻʹ͢Δ͜ͱͰղܾ͍ͯ͠Δ 4 ͦ΋ͦ΋߲໨୯ҐͷܕΛ࡞ΔͷͰ಺෦ܕ͸ԿͰ ΋ྑ͍ 4 λΠϓϛεϚονΤϥʔͱೖྗݕূΤϥʔͷग़ ΔλΠϛϯάͰফ໣͢Δ͙Β͍ͳΒจࣈྻͰ

Slide 57

Slide 57 text

࠷ۙͷٕज़త՝୊

Slide 58

Slide 58 text

࠷ۙͷٕज़త՝୊ ೖྗ஋ͷόΠϯσΟϯά 4 setter࡞Γͨ͘ͳ͍

Slide 59

Slide 59 text

࠷ۙͷٕज़త՝୊ ೖྗͷݕূ 4 λΠϛϯά͸UI૚ͷίϯτϩʔϥ͡Όͳͯ͘α ʔϏεͰ ※ݕূҧ൓Λྫ֎ͱͯ͠͠·͑͹εοΩϦ͢Δ 4 એݴ͸Ϟσϧʹڽू͍ͤͨ͞ ※BeanValidationͰ͋Δఔ౓͸࣮ݱ͍ͯ͠Δ

Slide 60

Slide 60 text

࠷ۙͷٕज़త՝୊ ηΩϡϦςΟ 4 ηΩϡϦςΟʹؔ͢Δ஌͕ࣝڽू͠ʹ͍͘ 4 Ϟσϧʹڽू্ͤͨ͞Ͱԣஅతʹద༻͍ͨ͠

Slide 61

Slide 61 text

࠷ۙͷٕज़త՝୊ DB͔Βͷू໿ϧʔτ෮ݩ 4 ςʔϒϧϚούʔͰ͸೉͍͠ 4 SQLͷ݁ՌηοτΛϚοϐϯά͍ͨ͠

Slide 62

Slide 62 text

DB͔Βͷू໿ϧʔτ෮ݩ(ଓ͖ʣ ݱ࣌఺Ͱ૬ੑͷྑͦ͞͏ͳϑϨʔϜϫʔΫ 4 Doma DomaͰݴ͏EntityΛ௚઀DomainϞσϧʹ͢ Δ͜ͱ͸ͳ͍͚Ͳɺ DomaͷEntity͔Βू໿ ϧʔτΛ෮ݩͬͯͷ͸༗Γͳؾ͕͍ͯ͠Δ 4 SpringͷJdbcTemplate ͍Ζ͍Ζͱ͔ͿͤΕ͹͋Δ͍͸…

Slide 63

Slide 63 text

DB͔Βͷू໿ϧʔτ෮ݩ(ଓ͖ʣ ΄͍͠ػೳ 4 ࣮ߦίϯςΩετʹ͋ΔΦϒδΣΫτΛผͷΦ ϒδΣΫτͷϑΟʔϧυʹϚοϐϯά 4 ϑΝΫτϦϝιουʹରԠ 4 StreamΛฦ͢API 4 ୯߲໨ValueObjectʹରԠ

Slide 64

Slide 64 text

Ҏ্ɺ࠷ۙͷٕज़త՝୊Ͱͨ͠

Slide 65

Slide 65 text

࠷ޙʹ

Slide 66

Slide 66 text

υϝΠϯϞσϧʹؔ৺ࣄΛຊ౰ʹڽूͤ͞Δʹ͸ ·ͩ·ٕͩज़తͳ՝୊΍ඞཁͳϊ΢ϋ΢͕ ͨ͘͞Μ͋Γ·͢ʂ ָ͠ΜͰ͍͖·͠ΐ͏ʂ

Slide 67

Slide 67 text

͋Γ͕ͱ͏͍͟͝·ͨ͠ʂ

Slide 68

Slide 68 text

No content