• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Creating Clean Code with AOP (T3CON10)
 

Creating Clean Code with AOP (T3CON10)

on

  • 653 views

OOP helps us creating a clearly laid out and intuitive model of the reality by means of objects. However, concerns like security, logging or transactions need to be implemented virtually anywhere, ...

OOP helps us creating a clearly laid out and intuitive model of the reality by means of objects. However, concerns like security, logging or transactions need to be implemented virtually anywhere, resulting in scattered error-prone code.
Aspect-Oriented Programming separates these cross-cutting concerns from the rest of the code and lets you handle them in a well-known, central location.

Statistics

Views

Total Views
653
Views on SlideShare
653
Embed Views
0

Actions

Likes
0
Downloads
3
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Creating Clean Code with AOP (T3CON10) Creating Clean Code with AOP (T3CON10) Presentation Transcript

    • Robert Lemke Create Clean Code with Aspect-Oriented Programming T3CON10 Frankfurt /** Asp ect *S ecu rity *@ asp ect */ ityA spe ct { cla s s Se cur olic ies; tec ted $pSamstag, 2. Oktober 2010 pro
    • Robert Lemke chief architect of TYPO3 Phoenix and FLOW3 co-founder of the TYPO3 Association 34 years old lives in Lübeck, Germany 1 wife, 1 daughter, 1 espresso machine likes drummingSamstag, 2. Oktober 2010
    • = PHP 5.3 Full Stack Application FrameworkSamstag, 2. Oktober 2010
    • DI Dependency Injection DRY YAA OOP Object-Oriented Programming YAGNI AOP Aspect-Oriented Programming CoC MVC Model View Controller POPO Plain Old PHP Object TDDSamstag, 2. Oktober 2010
    • /** * Creates a new post * * @param F3BlogDomainModelPost $newPost A fresh Post object which has not yet been * added to the repository * @return void */ public function createAction(F3BlogDomainModelPost $newPost) { if ($this->policyService->isGranted($this->currentUser, __CLASS__, __METHOD__) { $this->blog->addPost($newPost); $this->flashMessageContainer->add(Your new post was created.); $this->systemLogger->log(A new post was created., LOG_INFO); $this->notificationService->notify(A new post was created., robert@typo3.org); } else { $this->systemLogger->log(Someone tried to create a post., LOG_WARNING); throw new F3FLOW3SecurityExceptionAccessDeniedException(Tried to create.); } $this->redirect(index); } Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • /** * Creates a new post * * @param F3BlogDomainModelPost $newPost A fresh Post object which has not yet been * added to the repository * @return void */ public function createAction(F3BlogDomainModelPost $newPost) { if ($this->policyService->isGranted($this->currentUser, __CLASS__, __METHOD__) { $this->blog->addPost($newPost); $this->flashMessageContainer->add(Your new post was created.); $this->systemLogger->log(A new post was created., LOG_INFO); $this->notificationService->notify(A new post was created., robert@typo3.org); } else { $this->systemLogger->log(Someone tried to create a post., LOG_WARNING); throw new F3FLOW3SecurityExceptionAccessDeniedException(Tried to create.); } $this->redirect(index); } Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • AOP Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Aspect-Oriented Programming programming paradigm separates concerns to improve modularization OOP modularizes concerns into objects AOP modularizes cross-cutting concerns into aspects Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • /** * Creates a new post * * @param F3BlogDomainModelPost $newPost A fresh Post object which has not yet been * added to the repository * @return void */ public function createAction(F3BlogDomainModelPost $newPost) { $this->blog->addPost($newPost); $this->flashMessageContainer->add(Your new post was created.); $this->redirect(index); } Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Concerns? Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Concerns Separation of Concerns group features and behavior into manageable parts have a specific purpose and business to take care of Cross-Cutting Concerns are the party poopers who want to have a say in everything Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Cross-Cutting Concerns Logging Security Persistence Global Business Logic Dirty Hacks Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • We dont want infrastructure code in our models. Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • We want to unit-test even cross-cutting concerns Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • We want to centralize security-related code Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • AOP Lingo Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Aspect Part of the application where cross-cutting concerns are implemented In FLOW3 aspects are classes annotated with @aspect Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Join Point Is a single point in the call graph Method Execution Exception Represents an event, not a location Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Pointcut A set of join points where advices could be executed can be composed can be named Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Advice Action to take at a join points defined by the point cut Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • DEMO Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Kinds of Advice Advice types supported by FLOW3: @before @afterreturning @afterthrowing @after @around Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Pointcut Designators method(F3MyPackageMyClass->myMethod()) class(F3MyPackageMyClass) within(F3MyPackageMyInterface) classTaggedWith(someTag) methodTaggedWith(anotherTag) setting(Demo.Stuff.SomeSetting = "yeah, do it") filter(F3MyPackageMyCustomFilterImplementation) fi Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Runtime Evaluations evaluate(coffee.kind == "Arabica") Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Compound Pointcuts! /**!  * @around method(.*Controller->(new|create|edit|update|delete)Action()) &&  !methodTaggedWith(anybodyMayAccessThis)!  */! public function interceptMethodCalls($joinPoint) { ... } Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • DEMO Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • FLOW3s AOP implementation based on proxy classes unlike with most pre-processors line numbers stay the same no scaffolding 0 Lines of generated code which need to be maintained by you fast (on the second hit) Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Inspiring people to Hitchhikers Guide to FLOW3 shareSamstag, 2. Oktober 2010
    • Progress FLOW3 1.0.0 Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Further Reading FLOW3 Website http://flow3.typo3.org FLOW3 Download http://flow3.typo3.org/download git://git.typo3.org/FLOW3/Distributions/Base.git TYPO3 Forge http://forge.typo3.org Further Reading http://flow3.typo3.org/about/principles/further-reading Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Questions Email: robert@typo3.org Blog: http://robertlemke.de/blog Twitter: @t3rob Slides: http://slideshare.net/rlmp Create Clean Code with AOP T3CON10 FrankfurtSamstag, 2. Oktober 2010
    • Samstag, 2. Oktober 2010