DIãšãµãŒãã¹ãã±ãŒã¿ã®éã
DIãšãµãŒãã¹ãã±ãŒã¿ã¯ããããããªããžã§ã¯ãã®æ§ç¯ãšäŸåã®è§£æ±ºãšããä»äºãåãåºãããã®ãã¿ãŒã³ã§ãããšããã§ããã®2ã€ã®ãã¿ãŒã³ã®éããæç¢ºã«èª¬æã§ããã§ããããïŒ
Pimpleã§ã·ã³ãã«ã«æ£ããDIãçè§£ãã ã®ã³ãŒãã¯ä»¥äžã®ããã«ãªã£ãŠããŸããã
<?php require_once '../vendor/pimple/pimple/lib/Pimple.php'; // ã€ã³ãã© interface MailerInterface { public function send($body); } class SendmailMailer implements MailerInterface { public function send($body) { } } // ãã¡ã€ã³ class NewsletterTransfer { protected $mailer; public function __construct(\MailerInterface $mailer) { $this->mailer = $mailer; } public function send($newsletter) { $this->mailer->send($newsletter); } } $container = new \Pimple(); // ãªããžã§ã¯ãã³ã³ã¹ãã©ã¯ã·ã§ã³ã®ã³ã³ãã£ã®ã¥ã¬ãŒã·ã§ã³ $container['infrastructure.mailer'] = function($container) { $mailer = new \SendmailMailer(); return $mailer; }; $container['domain.transfer.newsletter'] = function($container) { $newsletterTransfer = new \NewsletterTransfer($container['infrastructure.mailer']); return $newsletterTransfer; }; // ãªããžã§ã¯ãã®å©çš $newsletterTransfer = $container['domain.transfer.newsletter']; $newsletterTransfer->send('ãã¥ãŒã¹ã¬ã¿ãŒæ¬æ');
DIã®ä»çµã¿ã解説ããããã®ãã®ã³ãŒãã«ã¯ãå®ã¯ãDIãã¿ãŒã³ãšãµãŒãã¹ãã±ãŒã¿ãã¿ãŒã³ãšãæ··åšããŠããŸãããã®ã³ãŒãããããªããžã§ã¯ãããšã®ãŸãšãŸããæèããŠããŒããåãåºããšã次ã®3ã€ã«ãªããŸãïŒå©çšåŽããé ã«äžŠã¹ãŠããŸãïŒã
<?php // ãªããžã§ã¯ãã®å©çš $newsletterTransfer = $container['domain.transfer.newsletter']; $newsletterTransfer->send('ãã¥ãŒã¹ã¬ã¿ãŒæ¬æ');
<?php // ãã¡ã€ã³ class NewsletterTransfer { protected $mailer; public function __construct(\MailerInterface $mailer) { $this->mailer = $mailer; } public function send($newsletter) { $this->mailer->send($newsletter); } }
<?php // ã€ã³ãã© class SendmailMailer implements MailerInterface { public function send($body) { } }
å³ã«ãããšã次ã®ããã«ãªããŸãã
ã©ããDIã§ãã©ãããµãŒãã¹ãã±ãŒã¿ãªã®ã§ããããïŒ ãŸãããã®3ã€ã®ãªããžã§ã¯ãã®ä»²ä»åœ¹ãšããŠæ©èœããã³ã³ããã¯ãDIã³ã³ãããªã®ã§ããããïŒãµãŒãã¹ãã±ãŒã¿ïŒã®å¯Ÿè±¡ã³ã³ããïŒãªã®ã§ããããïŒ
ãªããžã§ã¯ãããèŠãã³ã³ããã®äœçœ®ã¥ã
DIãªã®ããµãŒãã¹ãã±ãŒã¿ãªã®ãããã®2ã€ã®éããæç¢ºã«ããã«ã¯ããªããžã§ã¯ããã³ã³ããã«äœãæ±ããŠããã®ããçè§£ããªããŠã¯ãªããŸããã
å¿ èŠãªãªããžã§ã¯ããã³ã³ããããåãåºãïŒèœåçïŒ
äžã®ã³ãŒãã®å ¥å£éšåã«ãããããªããžã§ã¯ãAããAãããéçºããŠãããšããŸããããAããã®èŠç¹ã ããããã¯ã¢ããããã®ã次ã®å³ã§ãã
ãªããžã§ã¯ãBããªããžã§ã¯ãCã®éçºã¯Aããã®æ åœã§ã¯ãããŸããããªããžã§ã¯ãBãã©ã®ããã«æ§ç¯ãããã®ãã¯ãã³ã³ããã«å®çŸ©ãããŠãããããAããã¯åã«ã³ã³ãããããªããžã§ã¯ãAãåãåºããŠã䜿ãã ãã§ãã
ãªããžã§ã¯ãAããã¯ãã³ã³ãããçŽæ¥åç §ããååãããŒã«ããŠäœ¿ããããªããžã§ã¯ããåãåºããŸãã
ãªããžã§ã¯ãBãã©ã®ããã«äœãããã®ããæ°ã«ããããšãªãã宿ã ããªããžã§ã¯ãBããã 䜿ããšããç®çãéæããããã«ãã³ã³ããããååãããŒã«ããŠãªããžã§ã¯ããåãåºããããããµãŒãã¹ãã±ãŒã¿ã®ãã¿ãŒã³ã§ãã
ãªããžã§ã¯ãAã¯ãã³ã³ããã®å€åŽã§ã€ã³ã¹ã¿ã³ã¹åãããŸããã³ã³ããã®ç®¡çäžã«ãªããã®ãããªãªããžã§ã¯ãã§ã¯ãçŽæ¥ã³ã³ãããªããžã§ã¯ããéå ·ãšããŠåç §ããŠäœ¿ãå¿ èŠãããããã§ããããšãã°Symfony Standard Editionã«æšæºã§çšæãããŠããã³ã³ãããŒã©ã¯ã©ã¹ã¯ã³ã³ããã®ç®¡çäžã«ãªãããããµãŒãã¹ãã±ãŒã¿æ¹åŒã«ãªã£ãŠããŸãã
å¿ èŠãªãªããžã§ã¯ãã®åãå£ã ãçšæããŠåãåãïŒååçïŒ
å¥ã®æ åœè Bããã¯ããªããžã§ã¯ãBãéçºããŠããŸããBããã®èŠç¹ã ããããã¯ã¢ããããã®ã次ã®å³ã§ãã
ãªããžã§ã¯ãBã®å®è£ ã«ã¯ããªããžã§ã¯ãCïŒã®ã€ã³ã¿ãŒãã§ã€ã¹ïŒã䜿ã£ãŠããŸãããã®ãªããžã§ã¯ãCã¯ãããã«DãEã»ã»ã»ã䜿ã£ãŠãããããããŸãããããªããžã§ã¯ãCããå ã¯Bããã®æ åœã§ã¯ãããŸããããã åã«ãªããžã§ã¯ãCã䜿ããèªåã®æ åœã§ãããªããžã§ã¯ãBã®åŠçãå®è£ ãããã ãã§ãã
ãã®ãããžã§ã¯ãã§ã¯ããªããžã§ã¯ãBã¯ãå¿ ãã³ã³ããçµç±ã§å©çšããããšããåãæ±ºãããããšæã£ãŠãã ãããã€ãŸãããªããžã§ã¯ãBã¯ã³ã³ããã®ç®¡çäžã«ããããã§ãããã®ãããªå Žåããªããžã§ã¯ãBã®çææã«ãã³ã³ã¹ãã©ã¯ã¿ã®åŒæ°ã远å ã®ã»ãã¿ãŒåŒã³åºãã«ãã£ãŠãå¿ èŠãªäŸåãªããžã§ã¯ããã³ã³ãããèªåçã«ã»ããããããã«ã§ããŸãããªããžã§ã¯ãBã¯ããåãåãéå ·ã®çš®é¡ããã³ã³ã¹ãã©ã¯ã¿ã®åŒæ°ã§ç€ºããŠã¯ããŸãããèªãåãåºããŠããããã§ã¯ãããŸããã
ãªããžã§ã¯ãCãã©ã®ããã«äœãããã®ããæ°ã«ããããšãªãã宿ãããªããžã§ã¯ãCããã 䜿ããšããç®çãéæããããã«ã䜿ããããªããžã§ã¯ãã®åãåãå£ã ãçšæããŠãã³ã³ããããããžæž¡ããŠãããããšããã®ãDIã®ãã¿ãŒã³ã§ãã
ãŸãšã
åãã³ã³ããã§ããããã䜿ããªããžã§ã¯ããã³ã³ããã®ç®¡çäžã«ãããã©ããã§ã䜿ããææ³ãç°ãªããŸãããããžã§ã¯ãã§å©çšãããã¬ãŒã ã¯ãŒã¯ãšã®å Œãåãã§ãã³ã³ãã管çäžã«ãããªãç¶æ³ãªã©ããããŸãã
éèŠãªã®ã¯ãDIã§ããµãŒãã¹ãã±ãŒã¿ã§ããäŸåã®è§£æ±ºãšãªããžã§ã¯ãã®æ§ç¯ãšããä»äºããªããžã§ã¯ãèªèº«ããã³ã³ãããžç§»ããŠããã®ã¯åãã ãšããããšã§ããããã«ãã£ãŠãAãããBããã¯ããããã®æ åœç¯å²ã®ã¿ã«éäžã§ããŸãããªããžã§ã¯ãã®ã³ãŒãããäœèšãªãã®ãåãé€ãããèªåã®ä»äºã«ãã屿åãããããã«ãªããŸãã
åè
Advent Day 10: DI > SL ? « BEAR Blog








