Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
A_resource_oriented_framework_using_the_DI___AOP___REST_Triangle.pdf
Search
Akihito Koriyama
August 02, 2013
0
15
A_resource_oriented_framework_using_the_DI___AOP___REST_Triangle.pdf
Akihito Koriyama
August 02, 2013
Tweet
Share
More Decks by Akihito Koriyama
See All by Akihito Koriyama
BEAR.Sunday 2014-2024
koriym
0
35
イベント駆動コンテンツ (a.k.a Webアプリケーションの効率を再定義するBEAR.Sundayの分散キャッシングフレームワーク)
koriym
4
5.7k
Unconf: RWA読書会
koriym
0
470
REST 6+4の制約
koriym
2
2.5k
RESTful Web API 読書会 #1
koriym
3
270
RESTの力 / The Power of REST
koriym
10
7k
全てを結ぶ力 (2019)
koriym
3
750
REST 6+4=9の制約
koriym
3
890
OOP
koriym
0
210
Featured
See All Featured
Designing with Data
zakiwarfel
95
4.8k
Why Our Code Smells
bkeepers
PRO
331
56k
It's Worth the Effort
3n
180
27k
BBQ
matthewcrist
80
8.7k
StorybookのUI Testing Handbookを読んだ
zakiyama
11
4.6k
Fashionably flexible responsive web design (full day workshop)
malarkey
397
65k
Statistics for Hackers
jakevdp
789
220k
The Language of Interfaces
destraynor
151
23k
Rails Girls Zürich Keynote
gr2m
91
13k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
77
41k
The MySQL Ecosystem @ GitHub 2015
samlambert
242
12k
Six Lessons from altMBA
skipperchong
20
3k
Transcript
A resource oriented framework using the DI / AOP /
REST Triangle Version 0.1 (27 July
[email protected]
meetup #2)
Authors • Akihito Koriyama • Richard McIntyre
What’s BEAR.Sunday ? (1) • DI / AOP / REST
centered framework DI AOP REST
DI • Dependency inversion principle (DIP) • Object instantiation /
usage separation
DIP • Code should depend on things that are at
the same or higher level of abstraction • High level policy should not depend on low level details
Object instantiation / usage separation • Don’t mix (compile /
runtime ) • One time object construction DPNQJMF SVOUJNF
Application object graph by context • Application is single big
one valuable • Change structure, not behavior $app Object i/f i/f Object i/f i/f Object Router Response JSON XM L
Application class
ʁ #FUUFS DPNQJMF SVOUJNF
Ray.Di • Annotation based DI framework • Binding DSL •
True DI
AOP • Cross cutting concern as framework function • Multi
layered architecture Cache Log Auth
Aspects • log / cache / validation ... are aspects.
• Core concern is your domain model, not aspects.
Binding by context • Annotate, then bind interpretation • @Api
is intention. “JSON” is implement.
ऍΛղऍ ͜͜ͰʮΫϥεʹ@Dbͱऍ͕͋Δʯˍ ʮ”on”Ͱ࢝·͍ͬͯΔʯϝιουʹDBΛ ηοτ͢ΔDBΠϯδΣΫλʔΛଋറ ͍ͯ͠ ·͢ɻ DBΠϯδΣΫλʔϝιουʹΑͬ ͯmaster/slaveΛબ͠DBΦϒδΣΫτΛ ೖ͠·͢ɻ ར༻ଆɺඃར༻ଆͱʹDBऔಘ
ͷؔ৺͕͞Ε͍ͯ·͢ɻ ଋറ
Binding by condition • @Log all DELETE method • @Auth
all /admin/ path resources
Layering by context • MVC, Is 3 enough ?
Layering by context • Configurable layering over fixed callback Model
Cache Form Transaction Auth Validation
Runtime injection by aspect • Parameter provider inject parameter. •
method / parameter lookup • test friendly
Ray.Aop • AOP alliance standard • Injectable interceptor • Google
Guice
REST • Everything is a resource / API • use
URI, not class name
API driven development • API is hub • test friendly
DB API Mobile Web API Cloud Mock URI API
Resource graph • Resource is layered
http://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
Layered Resource UI Mobile Web Page Resource App script App
Resource Entity
Lazy request • ϏϡʔτϦΨʔͷϦιʔεϦΫΤετ
What’s BEAR.Sunday ? (2) • Resource oriented framework • no
control-object paradigm • information has name
What’s BEAR.Sunday ? (3) • Connecting framework • DI -
object to object • AOP -business logic to app logic • REST - information to information
Performance • Super fast • cache compiled object • cache
all objects • http friendly architecture
Hard functionality / Soft functionality • DI for application function
• AOP for runtime function
Scale • “model proxy” pattern • runtime injection makes db
scale easy
What’s BEAR.Sunday ?
“Zen” Framework less is more.
Arigato Photo socket http://www.flickr.com/photos/sydeen/5199310841/ three cat http://www.flickr.com/photos/ferran-jorda/2188887967 mvc http://symfony.com/legacy/doc/jobeet/1_2/en/04?orm=Propel