2012/06/30 Symfony勉強会 #6
SymfonyのアーキテクチャOGAWA Katsuhiro2012/06/30 Symfony勉強会#6
View Slide
‣খ༤େ@fivestr‣גࣜձࣾΫϩίε‣ύʔϑΣΫτPHP‣ޮతͳWebΞϓϦέʔγϣϯͷ࡞Γํ‣ઌ25ࡀʹͳΓ·ͨ͠ABOUT ME
AGENDA‣symfony 1.xͷΞʔΩςΫνϟ‣Symfony2ͷΞʔΩςΫνϟ‣ORMͷΞʔΩςΫνϟ‣ΞʔΩςΫνϟʹؔ͢Δࢀߟॻ੶
アーキテクチャとは‣ιϑτΣΞͷʮઃܭࢥʯ‣ʮߏʯΛࢦ͢߹͋Δ
symfony 1‣WebΞϓϦέʔγϣϯϑϨʔϜϫʔΫ‣ػೳ͕๛‣࣮ଟ‣Delicious, Dailymotion
フレームワークの内部‣symfonyػೳ͕๛‣ೝূཧ‣ϧʔςΟϯά‣ϑΥʔϜ‣ςϯϓϨʔτ‣ϩΪϯά
フレームワークの内部‣framework‣Έ߹ΘͤͯWebΞϓϦͷϑϨʔϜϫʔΫͱͯ͠ػೳ͢Δ‣platform‣୯ମͰར༻ՄೳͳϥΠϒϥϦ‣symfony 1.1͔Β໌֬ʹ
フレームワークの内部‣platform෦ʹ͓͚ΔϥΠϒϥϦͷ֦ுՄೳ͕ͩɺ෦ͰΘΓͱڧҾͰ൚༻ੑͷͳ͍࣮ʹͳ͍ͬͯͨ
プラグイン‣ผͷϥΠϒϥϦͳͲΛ؆୯ʹΈࠐΊΔΑ͏ʹ͢ΔΈ‣DoctrinejQuery‣ࣗͰ࡞ΕΔ‣ձࣾͰڞ௨ϥΠϒϥϦΛ࡞Δ
プラグイン‣ϓϥάΠϯͷΈͷ͓͔͛Ͱ؆୯ʹϑϨʔϜϫʔΫͷ֦ுՄೳʹ
プラグイン‣࠷ॳ͔ΒϓϥάΠϯͰΞϓϦΛ։ൃ͢Δ͜ͱΈ্Մೳ‣ΞϓϦ͝ͱ͍ճͤΔ
Symfony2‣symfonyͷޙܧʹͨΔSymfony2‣Ұ͔Βॻ͖͞ΕͨͨΊɺ1ܥͱ·ͬͨͭ͘ͷͱݴΘΕΔ͜ͱଟ͍‣࣮͋Γ‣‣Overblog
symfony 1とSymfony2‣frameworkͱplatform͕ΑΓ໌֬ʹ͞Εͨ‣ਓؾͩͬͨϓϥάΠϯͷΈ͕ΑΓͨΓલͷͷʹ‣BundleͱComponent
Component‣୯ମͰར༻ՄೳͳϥΠϒϥϦΛύοέʔδԽͨ͠ͷ͕
Component‣EventDispatcher‣Routing‣Templating‣Yaml‣HttpKernel‣...
Bundle‣ϓϥάΠϯͷΑ͏ͳΈ‣ϑϨʔϜϫʔΫͷػೳBundleͱͯ͠ఏڙ͞Ε͍ͯΔ‣FrameworkBundle
Bundle‣ΞϓϦBundleͱͯ͠࡞‣StoreBundle‣ϥΠϒϥϦ࿈ܞ‣DoctrineBundle‣MonologBundle
Bundle‣ΞϓϦͷίʔυBundleͷதʹ࡞Δ‣ͯ͢ͷػೳ͕Bundleͱͯ͠ύοέʔδԽ͞ΕΔͨΊɺ͍ͭͰ࠶ར༻Մೳ
DIコンテナ‣ґଘؔͷཧΛҾ͖ड͚Δ‣ίϯϙʔωϯτؒͷґଘDIίϯςφʹઃఆ͞ΕΔ‣DependencyInjection
Symfony2のアーキテクチャ‣Symfony2ͰɺBundleͱComponentͱ͍͏֓೦͕ొ͕ͨ͠ɺߟ͑ํsymfony 1ͷ͔࣌Βଘࡏ͍ͯͨ͠
Symfony2のアーキテクチャ‣symfony 1ͷ͜Ζɺґଘੑͷཧ͕ෳࡶԽ͍͕ͯͨ͠ɺDIίϯςφͷ࠾༻ʹΑΓ֦ுͷํ๏͕౷Ұ͞Εͨ
フレームワークとして‣Symfony21͔Βॻ͔ΕͨͨΊ࣮ͦͭ͜ͷ͚ͩͲɺઃܭࢥͷ෦symfony 1͔Βड͚ܧ͕Ε͍ͯΔ
ORMのアーキテクチャ‣symfony 1ͱSymfony2ͰɺORM(Doctrine)ͷΞʔΩςΫνϟ͕มߋ͞Ε͍ͯΔ‣symfony 1: Active Record‣Symfony2: Data Mapper
ORMのアーキテクチャ‣Active Record‣$record->save();‣Data Mapper‣$mapper->save($record);
Active Record‣ߦ(=Record)ΦϒδΣΫτ͕σʔλϕʔεʹΞΫηε͢ΔػೳΛ͍࣋ͬͯΔ
Active Record‣ར༻͕؆୯‣ΦϒδΣΫτ͕ORMͷ੍Λड͚Δ
Active Record‣ػೳΛ࣋ͬͨΫϥεΛܧঝ͢Δ‣DoctrineͳΒDoctrine_Record‣PropelͳΒBaseObject‣ΦϒδΣΫτ͕ORMͷ੍Λड͚Δ
Data Mapper‣ߦΦϒδΣΫτʹखΛग़͞ͳ͍‣ܧঝෆཁ‣Plain Old PHP Object‣DataMapperΦϒδΣΫτΛհͯ͠σʔλϕʔεΞΫηε͢Δ
Data Mapper‣Data Mapperͷ߹ɺΦϒδΣΫτʹ੍ݶ͕͔͔Βͳ͍ͨΊࣗ༝͕ߴ͍
参考書籍‣ΞʔΩςΫνϟΛਂ͘Δʹɺྑ࣭ͳॻ੶ΛಡΉͷ͕Α͍‣͍͍ͩͨߴ͍͚ͲɺΑ͍ຊ૬ԠͷՁ͕͋Δ
PofEAA‣ΤϯλʔϓϥΠζΞϓϦέʔγϣϯΞʔΩςΫνϟύλʔϯ‣http://www.amazon.co.jp/dp/4798105538
ご清聴ありがとうございました。