Slide 1

Slide 1 text

%FQFOEFODZ*OKFDUJPOͱ σβΠϯύλʔϯ ʰ1)1$0/'0,*/"8"ʱ !SVLJBEJB 4IP:BNBEB

Slide 2

Slide 2 text

ࣗݾ঺հ • ࢁాɹ঵ʢ΍·ͩɹ͠ΐ͏ʣ • ίωώτגࣜձࣾͰόοΫΤϯυΤϯδχΞΛ͍ͯ͠·͢ɻ • #CakePHP #TypeScript #React

Slide 3

Slide 3 text

ຊ೔͓࿩͢Δ಺༰͸ͪ͜Β w %FQFOEFODZ*OKFDUJPOͷ֓ཁΛ஌Δ w σβΠϯύλʔϯΛ஌Δ w %FQFOEFODZ*OKFDUJPOͷσβΠϯύλʔϯʹ৮ΕΔ w ˞1)1ݻ༗ͷ࿩͸গͳΊͰ͢ Կ౓΋஻Δʹ͸গ͠௕͍ͷͰɺ ʮ%*ʯͱུͭͭ͠ਐΊ·͢ɻ

Slide 4

Slide 4 text

͔͜͜Β͕ຊฤ

Slide 5

Slide 5 text

ʮ%FQFOEFODZ*OKFDUJPOͷ֓ཁʯ

Slide 6

Slide 6 text

Dependency Injectionͷ֓ཁ ͦ΋ͦ΋%*ͱ͸Կͳͷ͔ʁ

Slide 7

Slide 7 text

Dependency Injectionͷ֓ཁ %*ͱ͸ํ๏࿦Ͱ͢

Slide 8

Slide 8 text

“Dependency Injection Principles, Practices, and Patterns” Part 1 Putting Dependency Injection on the map “Dependency Injection is a set of software design principles and patterns that enables you to develop loosely coupled code.” 8 Dependency Injectionͷ֓ཁ

Slide 9

Slide 9 text

“Dependency Injection͸ɺૄ݁߹ͷίʔυΛ։ ൃ͢ΔͨΊͷιϑτ΢ΣΞઃܭݪଇ͓Αͼύ λʔϯͷηοτͰ͢” 9 Dependency Injectionͷ֓ཁ

Slide 10

Slide 10 text

͜͜·Ͱͷ·ͱΊ w อकੑͷߴ͍ίʔυͷ࣮ݱΛ໨తͱͨ͠ιϑτ΢ΣΞઃܭݪଇͱύ λʔϯͷηοτɻ w ιϑτ΢ΣΞઃܭͷʮͭͷݪଇʯͷͭʹؚ·ΕΔૄ݁߹ʢগͳ͍݁߹ʣ w ʮૄ݁߹ͷ࣮ݱΛ໨తͱͨ͠σβΠϯύλʔϯʯͱ͍͏ͷ͕ద੾ͳද ݱͱݴ͑Δɻ w ˞༨ஊʰ%*1BUUFSOʱͱ͍͏ݺশ΋ଘࡏ͠·͢

Slide 11

Slide 11 text

࣍ʹ%*͕ੜ·ΕͨܦҢʹ͍ͭͯ ݟ͍͖ͯ·͠ΐ͏ Dependency Injectionͷ֓ཁ

Slide 12

Slide 12 text

%*͕ੜ·ΕͨܦҢ

Slide 13

Slide 13 text

%*ͷىݯ w ىݯ͸+BWBͷίϛϡχςΟ w ೥ʙ೥ࠒʹ.BSUJO'PXMFS͕ఆٛͨ͠ݴ༿ w ࢀߟIUUQTNBSUJOGPXMFSDPNBSUJDMFTJOKFDUJPOIUNM w ʮ*OWFSTJPOPG$POUSPMʢ*P$ʣʯͱ͍͏֓೦͕౰࣌ଘࡏ͓ͯ͠Γɺ ͦͷ֓೦Λ۩ମԽ͠ɺύλʔϯͷͭͱͯ͠ѻ͏ͨΊͷݴ༿͕࡞Γग़ ͞Εͨɻ

Slide 14

Slide 14 text

*P$ʢ੍ޚͷٯసʣͱ͸Կͳͷ͔ʁ Dependency Injectionͷ֓ཁ - DI͕ੜ·ΕͨܦҢ

Slide 15

Slide 15 text

*P$ʢ੍ޚͷٯసʣ w ʰϋϦ΢ουͷݪଇʱͱ΋ݺ͹ΕΔੑ࣭ w ϓϩάϥϜʹ͓͍ͯɺʮݺͼग़͢ଆʯͱʮݺͼग़͞ΕΔଆʯ͕ैདྷ ͷϓϩάϥϜͱٯʹͳΔݱ৅Λࢦ͢ɻ w ޱޠతͳݴ͍ճ͠ʹ͢Δͱʮඞཁͳ࣌͸ͪ͜Β͔Βݺͼ·͢ʯͱ͍ ͏ҙຯ߹͍ʹͳΔɻ

Slide 16

Slide 16 text

*P$ʢ੍ޚͷٯసʣ w ϑϨʔϜϫʔΫͷੑ࣭Λදݱ͢ΔͨΊʹ΋༻͍ΒΕΔɻ w ։ൃऀ͕ఆٛͨ͠ϝιου͕ݺͼग़͞ΕΔλΠϛϯά͸ϑϨʔϜ ϫʔΫଆʹҕͶΒΕ͍ͯΔɻ w ίϯτϩʔϧͷ࣋ͪओ͕։ൃऀ͔ΒϑϨʔϜϫʔΫʹٯస͍ͯ͠ Δɻ

Slide 17

Slide 17 text

จষͷΈͩͱ఻ΘΓʹ͍͘ͷͰ ίʔυͰݟͯΈ·͠ΐ͏ Dependency Injectionͷ֓ཁ - DI͕ੜ·ΕͨܦҢ

Slide 18

Slide 18 text

1)16OJUͷίʔυྫ

Slide 19

Slide 19 text

1)16OJUͷςετίʔυ class ItemsTableTest extends TestCas e { public $fixtures = ['app.Items'] ; public function setUp( ) { parent::setUp() ; $this->Items = TableRegistry::getTableLocator()->get('Items') ; } public function tearDown( ) { TableRegistry::clear() ; } }

Slide 20

Slide 20 text

1)16OJUͷςετίʔυʢ੍ޚͷٯసʣ class ItemsTableTest extends TestCas e { public $fixtures = ['app.Items'] ; public function setUp( ) { parent::setUp() ; $this->Items = TableRegistry::getTableLocator()->get('Items') ; } public function tearDown( ) { TableRegistry::clear() ; } } ४උɺޙ࢝຤ɺςετ࣮ߦͷλΠϛϯάΛ ϑϨʔϜϫʔΫଆ͕Ѳ͍ͬͯΔ

Slide 21

Slide 21 text

*P$ͱ%*ͷؔ܎ੑ w %*͸ݴ͍׵͑Ε͹ʮґଘؔ܎ʹର͢Δ੍ޚͷٯసʯͱදݱͰ͖Δɻ w ͔͠͠ɺʮ੍ޚͷٯసʯͱ͍͏දݱ͕แׅత͗͢ΔͷͰɺʮ%**P$ʯ ͱ͢Δͷ͸ਖ਼֬Ͱ͸ͳ͍ɻ w ʮґଘؔ܎ʹର͢Δ੍ޚͷٯసʯΛͭͷύλʔϯͱͯ͠ଊ͑Δͨ Ίɺ%FQFOEFODZ*OKFDUJPOͱ͍͏໋໊͕஀ੜͨ͠ɻ

Slide 22

Slide 22 text

Inversion of Control Dependency Injection Dependency Injectionͷ֓ཁ - DI͕ੜ·ΕͨܦҢ

Slide 23

Slide 23 text

จষͩͱ఻͑ʹ͍͘ͷͰ ίʔυͰޠΓ·͢ Dependency Injectionͷ֓ཁ

Slide 24

Slide 24 text

ྫϝʔϧૹ৴ͷॲཧ

Slide 25

Slide 25 text

class EmailSender { private $mailClient ; private $address ; private $text ; public function __construct($address, $text ) { // ʮAmazon Simple Email ServiceʯΛ࢖༻ͯ͠ϝʔϧૹ৴Λѻ͏Ϋϥε $this->mailClient = new AwsSesClient() ; $this->address = $address ; $this->text = $text ; } public function send( ) { $this->mailClient->send($this->address, $this->text) ; } } $emailSender = new EmailSender('[email protected]', 'ςετϝʔϧͰ͢Ͷ') ; $emailSender->send(); Ұݟ໰୊ͳͦ͞͏ʹݟ͑Δ͕ɾɾʁ

Slide 26

Slide 26 text

class EmailSender { private $mailClient ; private $address ; private $text ; public function __construct($address, $text ) { // ʮAmazon Simple Email ServiceʯΛ࢖༻ͯ͠ϝʔϧૹ৴Λѻ͏Ϋϥε $this->mailClient = new AwsSesClient() ; $this->address = $address ; $this->text = $text ; } public function send( ) { $this->mailClient->send($this->address, $this->text) ; } } $emailSender = new EmailSender('[email protected]', 'ςετϝʔϧͰ͢Ͷ') ; $emailSender->send(); "XT4FT$MJFOUલఏͷ࣮૷ʹͳ͓ͬͯΓ ີ݁߹͕ൃੜ͍ͯ͠Δɻ

Slide 27

Slide 27 text

&NBJM4FOEFSΫϥε͕࣋ͭ՝୊ w ಛఆͷαʔϏε΁ͷґଘ w αʔϏεΛมߋ͢Δཁ͕݅ग़͖ͯͨ৔߹ɺ&NBJM4FOEFSΛେ͖͘ॻ ͖׵͑Δඞཁ͕ग़ͯ͘Δɻ w ςελϏϦςΟͷ௿͞ w &NBJM4FOEFSΫϥεͷςετʹ"XT4FTΫϥε΋ඞཁʹͳΔɻ

Slide 28

Slide 28 text

class EmailSender { private $mailClient ; private $address ; private $text ; public function __construct($client, $address, $text ) { $this->mailClient = $client; $this->address = $address ; $this->text = $text ; } public function send( ) { $this->mailClient->send($this->address, $this->text) ; } } $emailSender = new EmailSender(new AwsSesClient(), '[email protected]', 'ςετϝʔϧͰ͢Ͷ') ; $emailSender->send(); ࢖༻͢ΔαʔϏεʹؔ͢Δ৘ใΛ ֎͔Βࢦఆʢ֎෦͔Βͷґଘ஫ೖʣ

Slide 29

Slide 29 text

ૹ৴ॲཧͷΠϯλϑΣʔε interface iEmailClient { public function send($address, $text) ; } class AwsSesClient implements iEmailClient { private $mailClient ; public function __construct( ) { $this->mailClient = new AwsSes() ; } public function send($address, $text){ } } &NBJM4FOEFS͕ґଘ͢Δ෦෼Λ JOUFSGBDFͱͯ͠දݱ͠ɺ ґଘ౓ͷ௿ݮΛਤ͍ͬͯΔ

Slide 30

Slide 30 text

No content

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

※࢖͏αʔϏε͕มΘͬͯ΋ɺ͜͜Λࠩ͠ସ͑Ε͹OK

Slide 33

Slide 33 text

&NBJM4FOEFSΫϥεʹର͢Δ%*ͷ࣮ફ w Ϋϥεࣗ਎͕ґଘઌΛܾఆͤͣɺ֎෦͔ΒґଘઌΛࢦఆ͍ͯ͠Δɻ w &NBJM4FOEFSࣗ਎͸ʮϝʔϧॲཧΛ࣮ߦ͢Δͷ͕ͲͷαʔϏεͳͷ ͔ʯΛ஌͍ͬͯΔඞཁ͕ͳ͘ͳͬͨɻ w ʢ෭࣍తͳޮՌͰ͸͋Δ͕ʣςετʹඞཁͳϞοΫΛ࡞੒͠΍͘͢ͳ ΓɺςελϏϦςΟ΋޲্͍ͯ͠Δɻ

Slide 34

Slide 34 text

%*ͷ࿩Λ͜͜Ͱ۠੾Γ σβΠϯύλʔϯͷ࿩Λ͠·͢ Dependency Injectionͷ֓ཁ

Slide 35

Slide 35 text

ʮσβΠϯύλʔϯΛ஌Δʯ

Slide 36

Slide 36 text

օ͞Μ͸σβΠϯύλʔϯͱ͍͏ݴ༿Λ ͝ଘ஌Ͱ͠ΐ͏͔ʁ σβΠϯύλʔϯΛ஌Δ

Slide 37

Slide 37 text

σβΠϯύλʔϯͱ͸ʁ w ػೳ֦ு΍࠶ར༻͕͠΍͍͢ιϑτ΢ΣΞΛ࡞ΔͨΊʹઌਓ͕޻෉͠ ͖ͯͨϊ΢ϋ΢ΛूΊͨ΋ͷɻ w యܕతͳղ๏΋వΊΒΕ͍ͯΔͷͰɺ࣮ࡍͷϓϩάϥϛϯά΍ઃܭ Λ͢Δ্Ͱ໾ʹཱͭखҾ͖ʹͳΔɻ

Slide 38

Slide 38 text

σβΠϯύλʔϯͱ͍͏ݴ༿ͷ༝དྷ w ݩʑ͸ݐஙͷ෼໺Ͱੜ·Εͨݴ༿ w ݐ෺΍ࢢ֗ͷઃܭɾݐஙʹ͓͚Δ༷ʑͳτϨʔυΦϑ΍໰୊ɻͦͯ͠ɺ ͦΕʹର͢Δయܕతͳղܾํ๏ΛవΊͨॻ੶Ͱ͋Δʰύλϯɾϥϯ ήʔδʕ؀ڥઃܭͷखҾʱʢʣʹͯ࢖༻͞Εͨɻ w ˞ʰ1)1ʹΑΔσβΠϯύλʔϯೖ໳ʱ͔ΒҰ෦ൈਮ w ʰ%FTJHO1BUUFSOT&MFNFOUTPG3FVTBCMF0CKFDU0SJFOUFE 4PGUXBSFʱʢ˞௨শ(P'ຊʣʹΑΓɺʮσβΠϯύλʔϯʯͷݴ༿͕޿ ͘஌ΒΕΔ͜ͱʹͳͬͨɻ

Slide 39

Slide 39 text

(P'ͷσβΠϯύλʔϯͱ͸ʁ w ʰ%FTJHO1BUUFSOT&MFNFOUTPG3FVTBCMF0CKFDU0SJFOUFE 4PGUXBSFʱͷதͰ঺հ͞Ε͍ͯΔͷσβΠϯύλʔϯɻ w ஶऀͰ͋Δ໊͕ʰ(BOHPG'PVSʢ(P'ʣʱͱݺ͹Ε͓ͯΓɺ൴Β ͕ൃදͨ͠σβΠϯύλʔϯ͕ʮ(P'ͷσβΠϯύλʔϯʯͱҰൠ తʹݺ͹ΕΔΑ͏ʹͳͬͨɻ w ͪͳΈʹॳ൛͕ൃߦ͞Εͨͷ͸ɺ೥݄೔ɻ w ˞ຊൃදͰ͸ɺͷσβΠϯύλʔϯΛશͯ঺հ͢Δ͜ͱ͸͠·ͤΜɻ

Slide 40

Slide 40 text

σβΠϯύλʔϯΛ ࢖ͬͯΈΔ

Slide 41

Slide 41 text

$47ɺ9.-ɺ+40/ϑΝΠϧΛ ಡΈࠐΜͰը໘දࣔ͢ΔॲཧΛ ߟ͑ͯΈ·͢ɻ σβΠϯύλʔϯΛ஌Δ

Slide 42

Slide 42 text

class FileReader { private $filename ; function __construct($filename) { // ※ ֦ுࢠνΣοΫͷྫ֎ॲཧ͸ল͍͍ͯ·͢ $this->filename = $filename ; } function display() { if (stripos($this->filename, '.csv') !== false) { // CSVͷॲཧ } else if (stripos($this->filename, '.xml') !== false) { // XMLͷॲཧ } else if (stripos($this->filename, '.json') !== false) { // JSONͷॲཧ } } } $fileReader = new FileReader('sample.csv') ; $fileReader->display();

Slide 43

Slide 43 text

ݱ࣌఺ͷ՝୊ w ڞ௨͢ΔՕॴ͸͋Γͭͭ΋গ͠ҟͳΔෳ਺ͷॲཧ͕ɺͭͷϝιου ಺Ͱ෼ذॲཧ͞Ε͍ͯΔɻ w ͔͠΋ɺ͓ޓ͍ͷॲཧʹ͸ؔ࿈ੑ͕ͳ͍ɻ w ʮڽू౓͕௿͍ʯͱදݱ͞ΕΔঢ়ଶɻ w ͍ͭͰʹݴ͏ͱɺEJTQMBZϝιουͷςετ΋͠ʹ͍͘ɻ

Slide 44

Slide 44 text

(P'ͷσβΠϯύλʔϯ'BDUPSZ.FUIPE w ΦϒδΣΫτੜ੒࣌ͷΠϯλϑΣʔεͷΈΛఆٛ͠ɺͲͷΫϥεΛΠ ϯελϯεͱ͢Δ͔ΛαϒΫϥεʹ೚ͤΔύλʔϯͰ͢ɻ w ʮ'BDUPSZʯͱ͸ʮΫϥεͷΠϯελϯεΛੜ੒͢ΔαϒΫϥεʯ Λࢦ͍ͯ͠·͢ɻ w ࠓճ͸ɺϑΝΠϧܗࣜʹؔ܎ͳ͘ಉ༷ͷػೳΛఏڙ͢ΔΫϥεͷΠ ϯελϯεΛ࡞ΕΔΑ͏ʹ͠·͢ɻ

Slide 45

Slide 45 text

'BDUPSZ.FUIPEύλʔϯͷΫϥεਤ

Slide 46

Slide 46 text

ڞ௨ΠϯλϑΣʔεͷ࣮૷ /* * * ಡΈࠐΈػೳͱදࣔػೳΛදݱ͢ΔΠϯλϑΣʔε * / interface Reader { public function read() ; public function display() ; } // ͜͜ʹ͸ϑΝΠϧܗࣜʹؔΘΒͣڞ௨ॲཧͱͳΔϝιουΛఆٛ

Slide 47

Slide 47 text

class CSVReader extends Reader { private $filename ; private $file ; function __construct($filename) { $this->filename = $filename ; } function read() { $file = new SplFileObject($this->filename) ; $file->setFlags(SplFileObject::READ_CSV) ; $this->file = $file ; } function display() { foreach ($this->file as $line) { /* ߦ͝ͱʹॲཧ͍ͯ͘͠ */ } } } $47ϑΝΠϧΛѻ͏ΫϥεͷΠϯλϑΣʔε࣮૷ จࣈίʔυͷΤϯίʔυɺྫ֎ॲཧ͸ল͍͍ͯ·͢ɻ

Slide 48

Slide 48 text

'BDUPSZͷ࣮૷ class ReaderFactory { function create($filename) { return $this->createReader($filename) ; } /* * * ϑΝΠϧ֦ுࢠΛݩʹReaderΫϥεͷαϒΫϥεΛܾΊΔ * / private function createReader($filename) { if (stripos($this->filename, '.csv') !== false) { return new CSVReader($filename) ; } else if (stripos($this->filename, '.xml') !== false) { return new XMLReader($filename) ; } else if (stripos($this->filename, '.json') !== false) { return new JSONReader($filename) ; } } } ෼ذॲཧͰ൑அ͢Δͷ͸ ʮඞཁͳαϒΫϥε͕ͲΕͳͷ͔ʯͷΈ ݻ༗ͷॲཧ͸ αϒΫϥε಺ʹӅṭ͞Ε͍ͯΔ

Slide 49

Slide 49 text

ΞϓϦέʔγϣϯଆ͔Βͷར༻ $filename = ‘users.xml’ ; // ͲͷαϒΫϥεΛ࢖༻͢Δ͔ɺFactory͕൑அ $readerFactory = new ReaderFactory() ; // FactoryΛݩʹඞཁͳReaderΫϥεͷΠϯελϯεΛੜ੒ $reader = $readerFactory->create($filename) ; // ΞϓϦέʔγϣϯ͸ɺΠϯλϑΣʔεΛݩʹ࣮ͨ͠૷(read, display)Λར༻͢ΔͷΈ $reader->read() ; $reader->display() ;

Slide 50

Slide 50 text

'BDUPSZ.FUIPEͰԿ͕վળ͞Εͨʁ w ϑΝΠϧ֦ுࢠ͝ͱͷॲཧΛαϒΫϥεʹవΊΔ͜ͱ͕Ͱ͖ͨɻ w ڽू౓ͷߴ͍ঢ়ଶʹͳ͓ͬͯΓɺςελϏϦςΟ΋޲্ɻ w ΞϓϦέʔγϣϯͰѻ͏֦ுࢠ͕มԽͯ͠΋ɺαϒΫϥεΛ௥Ճͯ͠ 'BDUPSZΛՃච͢Δ͚ͩͰࡁΉɻ

Slide 51

Slide 51 text

'BDUPSZ.FUIPEύλʔϯͷΫϥεਤʢ࠶ܝʣ ※ϑΥʔϚοτ͕มΘͬͯ΋ɺ͚ͩ͜͜มߋ͢Ε͹OK

Slide 52

Slide 52 text

σβΠϯύλʔϯΛ஌ΔϝϦοτ w ઃܭͷࢦ਑ͱͳΔɻ w σβΠϯύλʔϯΛͦͷ··࢖ͬͯ΋ղܾͰ͖ͳ͍৔߹΋͋Δ͕ɺ ղܾʹ׆͔ͤΔՄೳੑ͸े෼͋Δɻ w ڞ௨ݴޠͱͯ͠༻͍Δɻ w ྫɿʮ'BDUPSZ.FUIPE͕ར༻Ͱ͖·ͤΜ͔ʁʯ w ύλʔϯ໊ΛೝࣝͰ͖Δਓಉ࢜ͰͳΒɺ͜Ε͚ͩͰ఻ΘΔɻ

Slide 53

Slide 53 text

͜͜Ͱ࠶౓ɺ%*ͷ࿩ʹ໭Γ·͢ɻ σβΠϯύλʔϯΛ஌Δ

Slide 54

Slide 54 text

%FQFOEFODZ*OKFDUJPOͱ σβΠϯύλʔϯͷؔΘΓ

Slide 55

Slide 55 text

%*͕ओ࣠ͳͷʹɺ σβΠϯύλʔϯʹ৮Εͨͷ͸Կނʁ Dependency InjectionͱσβΠϯύλʔϯͷؔΘΓ

Slide 56

Slide 56 text

%*΋σβΠϯύλʔϯ w ʰ%FTJHO1BUUFSOTʱͰఆٛ͞ΕͨͷσβΠϯύλʔϯ΋ɺ೥݄͕ ܦͬͨ͜ͱͰҰ෦͕ݟ௚͞Εɺ%*΋ʰ%FTJHO1BUUFSOTʱͷҰ෦ʹ͠ ·ͨ͠ɻ w ʰ%FTJHO1BUUFSOT:FBST-BUFS"O*OUFSWJFXXJUI&SJDI (BNNB 3JDIBSE)FMN BOE3BMQI+PIOTPOʱ0DU w IUUQTXXXJOGPSNJUDPNBSUJDMFTBSUJDMFBTQY Q w σβΠϯύλʔϯΛ஌Δ͜ͱ͕ɺ%*΁ͷཧղʹ΋ܨ͕Δɻ

Slide 57

Slide 57 text

$SFBUJPOBMʢੜ੒ʣΛ໨తͱͨ͠ύλʔϯ w ೥࣌఺ w 'BDUPSZ.FUIPEɺ"CTUSBDU'BDUPSZɺ#VJMEFSɺ1SPUPUZQFɺ 4JOHMFUPO w ೥ʹ࠶ఆٛ͞Εͨޙ w 'BDUPSZɺ#VJMEFSɺ1SPUPUZQFɺ%FQFOEFODZ*OKFDUJPO w ˞'BDUPSZ.FUIPE͕'BDUPSZͱ໊લΛม͑ͨɻ

Slide 58

Slide 58 text

࠷ޙʹɺ%*ͷύλʔϯʹ৮Ε͍͖ͯ·͢ Dependency InjectionͱσβΠϯύλʔϯͷؔΘΓ

Slide 59

Slide 59 text

ʮ%FQFOEFODZ*OKFDUJPO ͷσβΠϯύλʔϯʹ৮ΕΔʯ

Slide 60

Slide 60 text

%*ͷύλʔϯ w $POTUSVDUPS*OKFDUJPO w .FUIPE*OKFDUJPO w 1SPQFSUZ*OKFDUJPO w ˞4FUUFS*OKFDUJPOͱ΋ݺ͹Ε·͢ɻ ࠓճͷൃදͰ͸ $POUSVDUPS*OKFDUJPOͷΈʹ৮Ε·͢ɻ

Slide 61

Slide 61 text

$POUSVDUPS*OKFDUJPO w Ϋϥε͕ґଘؔ܎ͷΠϯελϯεΛඞཁͱ͍ͯ͠Δ৔߹ɺΫϥεͷί ϯετϥΫλͰґଘઌΛఏڙ͢Δ͜ͱͰɺকདྷతͳ࢖༻ͷͨΊͷࢀর Λอଘ͓ͯ͘͠ख๏ɻ w %*ͷجຊͱ΋ݴΘΕΔύλʔϯ จষ͚ͩͰ͸఻ΘΓʹ͍͘ͷͰ %*ͷઆ໌ͷ୊ࡐͱͨ͠ϝʔϧૹ৴ॲཧΛ ݩʹઆ໌͍͖ͯ͠·͢ɻ

Slide 62

Slide 62 text

ઌఔͷϝʔϧૹ৴ॲཧΛ ࢥ͍ग़͍ͯͩ͘͠͞ Dependency InjectionͱσβΠϯύλʔϯͷؔΘΓ

Slide 63

Slide 63 text

No content

Slide 64

Slide 64 text

࣮͸ɺ͜͜Ͱ΍͍ͬͯΔͷ͕ ʮ$POTUSVDUPS*OKFDUJPOʯͰ͢

Slide 65

Slide 65 text

class EmailSender { private $mailClient ; private $address ; private $text ; public function __construct($client, $address, $text ) { $this->mailClient = $client; $this->address = $address ; $this->text = $text ; } public function send( ) { $this->mailClient->send($this->address, $this->text) ; } } $emailSender = new EmailSender(new AwsSesClient(), '[email protected]', 'ςετϝʔϧͰ͢Ͷ') ; $emailSender->send(); &NBJM4FOEFSͷґଘΛ ΞϓϦέʔγϣϯଆ͔Β ஫ೖʢ*OKFDUJPOʣ͍ͯ͠Δ

Slide 66

Slide 66 text

ϝʔϧૹ৴ॲཧͷ$POTUSVDUPS*OKFDUJPO w &NBJM4FOEFSΫϥε͕ඞཁͱ͍ͯ͠ΔґଘઌͷΠϯελϯεΛ֎෦͔ Βࢦఆ͢Δɻ w ґଘؔ܎ͷΠϯελϯε"XT4FT$MJFOUͷΠϯελϯε w &NBJM4FOEFSTFOEϝιουͰ࢖༻͢ΔͨΊʹίϯετϥΫλ಺Ͱࢀ রΛอ࣋͢Δɻ

Slide 67

Slide 67 text

ࠓճͷ·ͱΊ

Slide 68

Slide 68 text

ࠓճͷ·ͱΊ w ʮ%FQFOEFODZ*OKFDUJPOʯ͸ૄ݁߹ͷ࣮ݱΛ໨తͱͨ͠ํ๏࿦Ͱ͋ ΓɺσβΠϯύλʔϯͰ͋Δɻ w ʮσβΠϯύλʔϯʯͱ͸ɺػೳ֦ு΍࠶ར༻͕͠΍͍͢ιϑτ΢Σ ΞΛ࡞ΔͨΊʹઌਓ͕޻෉͖ͯͨ͠ϊ΢ϋ΢ͷմͰɺΞϓϦέʔγϣ ϯઃܭͷࢦ਑ͱͳΔɻ w %*ύλʔϯͷجຊ͸ʮ$POTUSVDUPS*OKFDUJPOʯͰ͋Δɻ

Slide 69

Slide 69 text

/FYU"DUJPO w ʮ(P'ͷσβΠϯύλʔϯʯͬͯ༗໊͚ͩͲɺࠓͰ΋࢖͍͚ͬͯΔ΋ ͷͳͷ͔ʁ w %*ίϯςφʢ-BSBWFMͰ͍͏ͱ͜ΖͷαʔϏείϯςφʣ͸%*Λͦͷ ··࢖͏৔߹ͱൺ΂ͯɺԿ͕ศརʹͳͬͨͷ͔ʁ ͜ͷลΓΛਂງΓͯ͠ΈΔͱ %*ͷߋͳΔཧղʹܨ͕Δ͔΋͠Ε·ͤΜɻ

Slide 70

Slide 70 text

༨ஊ w (P'ͷσβΠϯύλʔϯͷ঺հΛ͍ͯ͠Δ͚ͩͰ෼͕ա͗ڈΔͷͰɺ৮ΕΔͷ ͸͋͑ͯ߇͑Ίʹ͠·ͨ͠ɻ w खૣ͘၆ᛌ͍ͨ͠৔߹͸ɺͪ͜ΒΛݟΔͷ͕ྑ͍Ͱ͢ɻ w IUUQTRJJUBDPNUBOBLBIJTBUFSVJUFNTEGEGEBB w (P'σβΠϯύλʔϯͱ%*ͷؔ܎ΛΑΓ஌Γ͍ͨํ͸ͪ͜ΒͷϙουΩϟετ͕ ͓͢͢ΊͰ͢ɻ w ʮ(P'σβΠϯύλʔϯͱ%*ʢલฤʣʯ w IUUQTPQFOTQPUJGZDPNFQJTPEF8'YY60O)"23YUH$3N

Slide 71

Slide 71 text

ࢀߟจݙ • ʰDependency Injection Principles, Practices, and Patternsʱ • https://www.amazon.com/dp/161729473X • ʮInversionOfControlʯ • https://martinfowler.com/bliki/InversionOfControl.html • ʮInversion of Control Containers and the Dependency Injection patternʯ • https://martinfowler.com/articles/injection.html

Slide 72

Slide 72 text

ࢀߟจݙ • ʰΦϒδΣΫτࢦ޲Ͱͳͥͭ͘Δͷ͔ ୈ̏൛ʱ • https://www.nikkeibp.co.jp/atclpubmkt/book/21/S00180/ • ʰPHPʹΑΔσβΠϯύλʔϯೖ໳ʱ • https://www.shuwasystem.co.jp/book/4798015164.html • ʰΦϒδΣΫτࢦ޲ͷ͜͜Ζʱ • https://www.maruzen-publishing.co.jp/item/b294729.html

Slide 73

Slide 73 text

ൃදʹର͢ΔϑΟʔυόοΫ͸ େ׻ܴͰ͢ʂ

Slide 74

Slide 74 text

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