Slide 1

Slide 1 text

Ray.Di / Ray.Aop ίτϋδϝ BEAR.Sunday Meetup #0 2012/07/19 ؠ࡚ߊ࢘ @madapaja

Slide 2

Slide 2 text

• ؠ࡚ߊ࢘ @madapaja • blog.madapaja.net • Symfony Ϣʔβʔձ • גࣜձࣾΤεɾΤϜɾΤε • հޢॅ୐ࣄۀ෦ • ΋͏͙͢ 0x1F ࡀ WHO AM I?

Slide 3

Slide 3 text

AGENDA • BEAR.Sunday • Ray • Ray.Di • Ray.Aop

Slide 4

Slide 4 text

BEAR.SUNDAY ʮϙΠϯτ͸໰୊ͷղܾʹ࣮૷Ͱ͸ͳ͘ઃܭͰ௅΋͏ͱͯ͠Δ఺Ͱ͢ɻ ͜Ε͕։ൃϦιʔεͷࡉ͍ࡉ͍๻͕௅ΊΔ།Ұͷํ๏Ͱ͢ɻʯ @koriym

Slide 5

Slide 5 text

BEAR.SUNDAY KEYWORDS • PHP (5.4+) • Ϧιʔεࢦ޲ϑϨʔϜϫʔΫ / Because Everything is A Resource • ؔ৺ͷ෼཭ • REST • ίϚϯυΫΤϦ੹຿෼཭(CQRS) • APIۦಈ։ൃ • ΞεϖΫτࢦ޲ϓϩάϥϛϯά(AOP) • ґଘੑͷ஫ೖ(DI) • Cache • HATEOAS(Hypermedia as the Engine of Application State) • ...

Slide 6

Slide 6 text

BEAR.SUNDAY 2ͭͷப • Ray • DI / AOP support • BEAR.Resource • Ϧιʔεࢦ޲ΞʔΩςΫνϟʢROAʣʹΑΔίϯ ϙʔωϯτ઀ଓͷͨΊͷαʔϏεϨΠϠϑϨʔϜϫʔ Ϋ

Slide 7

Slide 7 text

RAY • Google Guice ͔ΒΠϯεύΠΞ • 2ͭͷύοέʔδ • Ray.Di • Ξϊςʔγϣϯϕʔεͷ Dependency Injection ϑϨʔϜϫʔΫ • ґଘੑͷ஫ೖΛ൐͏ΦϒδΣΫτͷੜ੒ͱ؅ཧ • Ray.Aop • ΞεϖΫτࢦ޲ϑϨʔϜϫʔΫ

Slide 8

Slide 8 text

RAY.DI • based on Aura.Di • ΫϦʔϯ —— ίϯςφࣗ਎ͷґଘੑ΋શͯ֎෦஫ೖʹ಺෦Ͱ new ͞Ε͍ͯΔݻఆΫϥε͕ͳ ͘ೖΕସ͑Մೳ • ίϯετϥΫλ/ηολʔΠϯδΣΫγϣϯ • ܧঝ͕༗ޮͳωʔϜυύϥϝʔλࢦఆ • JSR-250(Common Annotations for Java)/330(DI for Java)ελΠϧΞϊςʔγϣϯͷҰ෦Λ ࣮૷ • Doctrine\Common\Annotations ʹΑΔΞϊςʔγϣϯ࣮૷ • Ray.AopʹΑΔΞεϖΫτΛ৫ΓࠐΜͩΦϒδΣΫτͷऔಘ

Slide 9

Slide 9 text

HOW TO DI?

Slide 10

Slide 10 text

HOW TO DI?

Slide 11

Slide 11 text

HOW TO DI?

Slide 12

Slide 12 text

SYMFONY DI COMPONENT

Slide 13

Slide 13 text

SYMFONY DI COMPONENT Mailer ΫϥεͷҾ਺ʹ’sendmail’Λ஫ೖ

Slide 14

Slide 14 text

SYMFONY DI COMPONENT Mailer ΫϥεͷҾ਺ʹ’sendmail’Λ஫ೖ NewsletterManager ΫϥεͷҾ਺ʹ MailerͷϦϑΝϨϯεΛ஫ೖ

Slide 15

Slide 15 text

SYMFONY DI COMPONENT NewsletterManagerͷΠϯελϯεΛऔಘ Mailer ΫϥεͷҾ਺ʹ’sendmail’Λ஫ೖ NewsletterManager ΫϥεͷҾ਺ʹ MailerͷϦϑΝϨϯεΛ஫ೖ

Slide 16

Slide 16 text

RAY.DI PATTERN A

Slide 17

Slide 17 text

RAY.DI PATTERN A Mailer ΫϥεͷtransportҾ਺ʹ’sendmail’Λ஫ೖ

Slide 18

Slide 18 text

RAY.DI PATTERN A Mailer ΫϥεͷtransportҾ਺ʹ’sendmail’Λ஫ೖ NewsletterManager ΫϥεͷmailerҾ਺ʹ Mailerͷ஗ԆΦϒδΣΫτੜ੒Λ஫ೖ

Slide 19

Slide 19 text

RAY.DI PATTERN A NewsletterManagerͷΠϯελϯεΛऔಘ Mailer ΫϥεͷtransportҾ਺ʹ’sendmail’Λ஫ೖ NewsletterManager ΫϥεͷmailerҾ਺ʹ Mailerͷ஗ԆΦϒδΣΫτੜ੒Λ஫ೖ

Slide 20

Slide 20 text

RAY.DI PATTERN A NewsletterManagerͷΠϯελϯεΛऔಘ Mailer ΫϥεͷtransportҾ਺ʹ’sendmail’Λ஫ೖ NewsletterManager ΫϥεͷmailerҾ਺ʹ Mailerͷ஗ԆΦϒδΣΫτੜ੒Λ஫ೖ ͜ ͷ ํ ๏ ͸ Ξϊ ς ʔ γ ϣ ϯ Λ ߦ ͑ ͳ ͍ 3rdύʔ ςΟ /ط ଘ Φ ϒ δΣ Ϋ τ ͷ ͨ Ί ͷ ΋ ͷ

Slide 21

Slide 21 text

RAY.DI PATTERN B ໊લ෇͖ΠϯδΣΫγϣϯࢦఆ ΠϯλʔϑΣʔεΠϯδΣΫγϣϯࢦఆ

Slide 22

Slide 22 text

RAY.DI PATTERN B ໊લ෇͖ΠϯδΣΫγϣϯࢦఆ ΠϯλʔϑΣʔεΠϯδΣΫγϣϯࢦఆ

Slide 23

Slide 23 text

RAY.DI PATTERN B ໊લ෇͖ΠϯδΣΫγϣϯࢦఆ ΠϯλʔϑΣʔεΠϯδΣΫγϣϯࢦఆ

Slide 24

Slide 24 text

RAY.DI PATTERN B ϞδϡʔϧͰઃఆΛఆٛ ར༻

Slide 25

Slide 25 text

RAY.DI PATTERN B ϞδϡʔϧͰઃఆΛఆٛ ར༻ Module::configure()ͰઃఆΛఆٛ

Slide 26

Slide 26 text

RAY.DI PATTERN B ϞδϡʔϧͰઃఆΛఆٛ ར༻ Module::configure()ͰઃఆΛఆٛ transport_typeͱ͍͏໊લ෇͖ͷՕॴʹ ‘sendmail’ΛόΠϯυ

Slide 27

Slide 27 text

RAY.DI PATTERN B ϞδϡʔϧͰઃఆΛఆٛ ར༻ Module::configure()ͰઃఆΛఆٛ transport_typeͱ͍͏໊લ෇͖ͷՕॴʹ ‘sendmail’ΛόΠϯυ MailerInterfaceͷ஫ೖ͕ඞཁͳՕॴʹ MailerΛόΠϯυ

Slide 28

Slide 28 text

MODULE? • ಛఆͷؔ৺ྖҬʹ͍ͭͯͷઃఆ΍ߏ੒Λߦ͏୯Ґ ʢओʹDI΍ΠϯλʔηϓλͷͨΊͷόΠϯυΛߦ͏ʣ • ػೳͷؔ৺ʢDoctrineOrmModule/SwiftMailerModule...ʣ΍ ಈ࡞ϞʔυʢProdModule/DevModule...ʣͳͲͰ෼ׂ • Ϟδϡʔϧ͸ɺଞͷϞδϡʔϧΛ install Ͱؔ৺͝ͱʹ෼͚ΒΕͨϞδϡʔϧΛ߹੒Ͱ͖·͢ • ࠷ऴతʹ߹੒͞Εͨ஌ࣝʹΑͬͯΦϒδΣΫτάϥϑ͕ߏங͞Ε·͢ɻ • ϞδϡʔϧʹΑΓɺαʔϏείϯϙʔωϯτͦͷ΋ͷΛDIʹΑͬͯೖΕସ͑ɺ ͦͷৼΔ෣͍ΛAOPͰมߋ͢Δ ʢଟ͘ͷϑϨʔϜϫʔΫͱ͸ҟͳΓɺFWͰൃߦ͞ΕΔΠϕϯτ΍γάφϧʹରͯ͠ɺ ɹAppଆͰίʔϧόοΫΛΞλον͢ΔͷͰ͸͋Γ·ͤΜʣ

Slide 29

Slide 29 text

RAY.DI OTHERS • @PostConstruct Ξϊςʔγϣϯ • શͯͷґଘ͕஫ೖࡁΈͷ͜ͱ͕อূ͞Εͨঢ়ଶͰͷॳظԽॲཧ • @PreDestory Ξϊςʔγϣϯ • શͯͷґଘΦϒδΣΫτ͕ഁյ͞Εͯͳ͍͜ͱ͕อো͞Εͨঢ়ଶͰͷγϟοτμ΢ϯॲཧ • @Scope • ΠϯελϯεͷৼΔ෣͍ઃఆʢγϯάϧτϯʣ • ηολʔΠϯδΣΫγϣϯ • traitΠϯδΣΫγϣϯ • ϓϩόΠμʔ • ...

Slide 30

Slide 30 text

RAY.AOP • AOPΞϥΠΞϯε४ڌͷ ΞεϖΫτࢦ޲ϓϩάϥϛϯά࣮૷ • ԣஅతؔ৺ࣄʢΞεϖΫτʣͷॲཧ • ϝιουΠϯλʔηϓλ

Slide 31

Slide 31 text

Πϯλʔηϓλ λΠϚʔ όϦσʔγϣϯ τϥϯβΫγϣϯ ࣮ϝιου

Slide 32

Slide 32 text

ϝιουΠϯλʔηϓλͷఆٛ ϞδϡʔϧͰͷόΠϯυ ར༻

Slide 33

Slide 33 text

ϝιουΠϯλʔηϓλͷఆٛ ϞδϡʔϧͰͷόΠϯυ ར༻ ࣮ϝιουͷݺͼग़͠

Slide 34

Slide 34 text

ϝιουΠϯλʔηϓλͷఆٛ ϞδϡʔϧͰͷόΠϯυ ར༻ ࣮ϝιουͷݺͼग़͠ ͢΂ͯͷϝιουʹTimerInterceptorΛόΠϯυ

Slide 35

Slide 35 text

ΠϯλʔηϓλͷRAY.AOP࣮૷

Slide 36

Slide 36 text

OBJECT FRAMEWORK? • Ray.Di • ΦϒδΣΫτੜ੒ͷͨΊͷϑϨʔϜϫʔΫ • Ϟδϡʔϧ͕͍࣋ͬͯΔ஌ࣝΛར༻ͯ͠ɺDiͱΞεϖΫτΛߏ੒͠ɺΦϒδΣΫτάϥϑΛߏஙʢʹ ίϯύΠϧʣ • ૣظଋറͷߏ੒ʢܾ·ͬͯΔ΋ͷɺมߋ͕ͳ͍΋ͷʣ • Ray.Aop • ΦϒδΣΫτར༻ͷͨΊͷϑϨʔϜϫʔΫ • ϥϯλΠϜ • ஗Ԇଋറͷߏ੒ʢ࣮ߦ࣌ʹܾఆ͢ΔDBͷ઀ଓઌͳͲʣ͸ܾఆͨ࣌͠ʹόΠϯυ ʢϥϯλΠϜΠϯδΣΫλʣ

Slide 37

Slide 37 text

OBJECT FRAMEWORK? • ੜ੒ͱར༻ͷ෼཭ • RayʢBEARʣͰ͸ੜ੒ͱར༻͕෼཭͞Ε͍ͯΔ • ੜ੒ͱར༻Λಉ࣌ʹߦΘͳ͍ • ੜ੒ͷ࠶ར༻͕Մೳ • ଞͷϑϨʔϜϫʔΫͱҰઢΛը͢ϨϕϧͰΩϟογϡΛߦ͑Δ • PHPɺΞϊςʔγϣϯͷύʔεɺΠϯδΣΫγϣϯͷίετ͕ݪཧతʹ0ʹͳΔ • Ray = ΦϒδΣΫτͷʮੜ੒ɺར༻ɺফ໓ʯΛ໘౗ΈΔΦϒδΣΫτϑϨʔϜϫʔΫ

Slide 38

Slide 38 text

·ͱΊ • BEAR.Sunday Λ৮ͬͯΈΑ͏ • Ray.Di / Ray.Aop / BEAR.Resource ͋ͨΓ͔Β࢝ΊΔͷ͕Φεεϝ • Ray.Aop Λ΍ͬͯΈΔ৔߹͸Ray.DiΛ௨ͯ͠৮Δͷָ͕ • Ray ʹؔͯ͠͸ɺϒϩάʢhttp://blog.madapaja.net/ʣʹ΋ ॻ͍ͨͷͰɺࢀߟʹͳΔ͔΋ʁ • Have fun!

Slide 39

Slide 39 text

ࢀߟ • BEAR.Sunday Manual: http://code.google.com/p/bearsunday/wiki/manual?tm=6 • Ray PHP User Guide: http://code.google.com/p/rayphp/wiki/Motivation?tm=6 • BEAR.Sunday github: https://github.com/koriym/BEAR.Sunday • BEAR Blog: http://www.bear-project.net/blog/ • ܊ࢁ͞Μ Slideshare: http://www.slideshare.net/akihito.koriyama/

Slide 40

Slide 40 text

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