Slide 1

Slide 1 text

LaravelͰֶͿ Domain Model #mkmklt 1/17

Slide 2

Slide 2 text

ࣗݾ঺հ ૲໺ ྑଠɹ(Twitter/: mpls_104) ɾגࣜձࣾ͏ΔΔ(https://www.uluru.biz/) ʹͯεΫϥϜϚελʔ,αʔόʔαΠυΤϯδχΞ, ࠾༻ͳͲ ɾ޷͖ͳݘɿࣲݘ ɾ޷͖ͳອըɿϋϯλʔϋϯλʔɾδϣδϣ

Slide 3

Slide 3 text

DDDΛ΋ͬͱ޿Ί͍ͨ

Slide 4

Slide 4 text

Ϟνϕʔγϣϯ ɾࠓϝΠϯͰ΍ͬͯΔϓϩμΫτ͕ ɹखଓ͖ܕʹॻ͔Ε͍ͯͯਏ͍ɻ ɾ৽͘͠࡞ΔϓϩμΫτͰ͸൵͍͠ɹɹɹɹ ɹࢥ͍͸ͨ͘͠ͳ͍ɻ ɾνʔϜͷΤϯδχΞͷϨϕϧΛ্ ɹ͍͛ͨɻetc…

Slide 5

Slide 5 text

DDDͷྑ͞Λ Ͳ͏޿Ί͍͔ͯ͘ʁ

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

෼ް͍ Θ͔Γʹ͍͘

Slide 8

Slide 8 text

͜ΕΛ͓નΊͯ͠ɺ ʮ͡Ό͋ಡΜͰ͖·͢ʂʯ ͱݴ͑Δਓ͸গͳ͍ͩΖ͏

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

IUUQTHJUIVCDPNTZTUFNTFLLFJJTPMBUJOHUIFEPNBJO

Slide 11

Slide 11 text

Θ͔Γ΍͍͢ʂ

Slide 12

Slide 12 text

PHPerͷͨΊʹɺ LaravelͰαϯϓϧΛ࡞Ζ͏ʂ

Slide 13

Slide 13 text

DDDͷ࿩Λ10෼ͰవΊΔͷ͸ ઈରʹແཧͳͷͰɺɺ

Slide 14

Slide 14 text

ઓུతDDD(ͷҰ෦) ɾϢϏΩλεݴޠ ɾڥք෇͚ΒΕͨίϯςΩετ ɾίϯςΩετϚοϐϯά ɾɾɾetc

Slide 15

Slide 15 text

࿩͠·ͤΜʂ

Slide 16

Slide 16 text

ઓज़తDDD(ͷҰ෦)

Slide 17

Slide 17 text

ઓज़తDDD(ͷҰ෦) ͚ͩ͜͜ʂ

Slide 18

Slide 18 text

Domain Model ɾ Value Object ɾ Entity

Slide 19

Slide 19 text

Value Object ɾ ஋͕ෆมɻ ɾ ஋ͷมߋ͕͋Δ৔߹͸ɺ৽͠ ͍΋ͷ࡞੒ͯ͠࠶୅ೖ͢Δ

Slide 20

Slide 20 text

Entity ɾ ҰҙʹͳΔࣝผࢠΛ࣋ͭ ɾ ಺෦ͷ஋͕Մม ɾ ϥΠϑαΠΫϧ͕͋Δ

Slide 21

Slide 21 text

Demo

Slide 22

Slide 22 text

Demo: ֓ཁ ɾ EntityͰ͋ΔEmployee(ैۀһΫϥε)Λߟ͑·͢ ɾ Employee͸ैۀһ൪߸ɺࢯ໊ɺి࿩൪߸ɺϝʔϧΞυϨε Λ࣋ͪ·͢ ɾ ͜ΕΒ͕Value ObjectʹͳΓ·͢ ɾ localhost/api/employeeʹPostͨ͠Βैۀһ৘ใΛొ࿥Ͱ ͖Δͱ͠·͠ΐ͏

Slide 23

Slide 23 text

Demo: ੍໿ ɾ ࢯ໊͸40จࣈҎ಺ ɾ ϝʔϧΞυϨε͸ਖ਼نදݱͰνΣο Ϋ͢Δͱ͢Δɻ˞ࡶ͚ͩͲڐͯ͠ '/^[a-z0-9A-Z]+@[a-z0-9A-Z]+[a-z0-9A-Z.]/'

Slide 24

Slide 24 text

Demo: ੍໿ ɾ ࢯ໊͸40จࣈҎ಺ ɾ ϝʔϧΞυϨε͸ਖ਼نදݱͰνΣο Ϋ͢Δͱ͢Δɻ※ࡶ͚ͩͲڐͯ͠ '/^[a-z0-9A-Z]+@[a-z0-9A-Z]+[a-z0-9A-Z.]/' ͜͜Λ࣮૷͍͖ͯ͠·͢

Slide 25

Slide 25 text

Χϯϖ୅ΘΓͷTODO - EmployeeTest͕ࣦഊ͢Δ͜ͱΛ֬ೝ - Employee.phpͷίϯετϥΫλΛमਖ਼ - MailAddress.phpʹυϝΠϯϩδοΫΛ௥Ճ - ςετ͕௨Δ͜ͱΛ֬ೝ

Slide 26

Slide 26 text

EmployeeΫϥε employeeNumber = $employeeNumber; $this->name = $name; $this->mailAddress = $mailAddress; $this->phoneNumber = $phoneNumber; } public function toString() :string { return "Employee{" . "employeeNumber=" . $this->employeeNumber . ", name=" . $this->name . ", phoneNumber=" . $this->phoneNumber . ", mailAddress=" . $this->mailAddress .

Slide 27

Slide 27 text

employeeNumber = new EmployeeNumber("10111"); $this->name = new Name("ాதଠ࿠"); $this->mailAddress = new MailAddress("[email protected]"); $this->phoneNumber = new PhoneNumber("0120-111-111"); } ςετͷ४උ

Slide 28

Slide 28 text

/** * * @return void * @test * @expectedException LogicException * @expectedExceptionMessage ϝʔϧΞυϨεͷܗ͕ࣜෆਖ਼Ͱ͢ */ public function ͋Γ͑ͳ͍ϝʔϧΞυϨε() { $illegalMailAddress = new MailAddress("test@@test.com"); $employee = new Employee( $this->employeeNumber, $this->name, $illegalMailAddress, $this->phoneNumber ); $employee->toString(); } } ࣦഊΛݟಧ͚Δ

Slide 29

Slide 29 text

employeeNumber = $employeeNumber; $this->name = $name; $this->mailAddress = $mailAddress; stringͰ͸දݱྗ͕ऑ͍

Slide 30

Slide 30 text

checkValidEmail($mailAddress); $this->value = $mailAddress; } private function checkValidEmail(String $mail) { if (!preg_match("/^[a-z0-9A-Z]+@[a-z0-9A-Z]+[a-z0-9A-Z.]/", $mail)) { throw new LogicException("ϝʔϧΞυϨεͷܗ͕ࣜෆਖ਼Ͱ͢"); } } } ࢓༷ΛΈͨ͞ͳ͍MailAddresΛ ࡞Βͤͳ͍

Slide 31

Slide 31 text

/** * * @return void * @test * @expectedException LogicException * @expectedExceptionMessage ϝʔϧΞυϨεͷܗ͕ࣜෆਖ਼Ͱ͢ */ public function ͋Γ͑ͳ͍ϝʔϧΞυϨε() { $illegalMailAddress = new MailAddress("test@@test.com"); $employee = new Employee( $this->employeeNumber, $this->name, $illegalMailAddress, $this->phoneNumber ); $employee->toString(); } } ςετ͕௨Δ͜ͱΛݟಧ͚Δ

Slide 32

Slide 32 text

ൃදޙͷิ଍ Entityʹ੹຿Λ࣋ͨͤΔͷͰ͋Ε͹ɺ ValueObject ʹू໿͢Δͷ͕๬·͍͠ɻ employeeNumber = $employeeNumber; $this->employeeProfile = $employeeProfile; }

Slide 33

Slide 33 text

ɾཪςʔϚʹɺʮϋΠϓϨο γϟʔͷதͰίʔσΟϯάͯ͠ς ετ௨͢ͱ͜Ζ·ͰͰ͖Δ͔͕ ͋ͬͨΜͰ͕͢ɺࣦഊ͠·ͨ͠ɻ ൃදޙͷ൓ল

Slide 34

Slide 34 text

ɾදݱྗ͕૿͑Δ ɾ஋ͱͯ͠ൺֱ͕Ͱ͖Δ ɾঢ়ଶΛෆมʹอͭ ɾυϝΠϯϩδοΫͷू໿ઌʹͳΔ Value ObjectͷϝϦοτ

Slide 35

Slide 35 text

Fool proof ͱͯ͠ ਓͷೖΕସΘΓ͕ଟ͍ະ੒ख़ͳ։ൃ૊৫͕ී௨ʹ࣮૷͢Δ ͱɺνΣοΫͷϩδοΫ͕֤Controllerʹ఺ࡏͯ͠͠· ͏ɻ υϝΠϯϞσϧΛॳظʹઃܭ͢Δ͜ͱͰɺޙʑͷ඼࣭ʹӨ ڹΛ༩͑Δ

Slide 36

Slide 36 text

࢖͍ॴ ԿͰ΋͔ΜͰ΋Value Objectʹ͢Ε͹͍ ͍ͱ͍͏Θ͚Ͱ͸ͳ͍ɻ(͸ͣ) ෳࡶͳυϝΠϯϩδοΫʹͳΔ෦෼Λ ίϯςΩετϚοϐϯάͰݟ͚ͭΔ΂͖ɻ

Slide 37

Slide 37 text

ձࣾ঺հ

Slide 38

Slide 38 text

No content

Slide 39

Slide 39 text

No content

Slide 40

Slide 40 text

No content

Slide 41

Slide 41 text

࠷ޙʹ IUUQTKPCTGPSLXFMMDPNVMVSVKPCT