SlideShare a Scribd company logo
1 of 122
Download to read offline
Solving Cross-Cutting
Concerns in PHP
Alexander Lisachenko
About me:
2
lisachenko
lisachenko
‣ Head of Software Architecture
at Alpari (RU) Forex Broker
About me:
2
lisachenko
lisachenko
‣ Head of Software Architecture
at Alpari (RU) Forex Broker
‣ Have worked with computers
since 7 years old
About me:
2
lisachenko
lisachenko
‣ Head of Software Architecture
at Alpari (RU) Forex Broker
‣ Have worked with computers
since 7 years old
‣ Clean code advocate, guru in
enterprise architecture
About me:
2
lisachenko
lisachenko
‣ Head of Software Architecture
at Alpari (RU) Forex Broker
‣ Have worked with computers
since 7 years old
‣ Clean code advocate, guru in
enterprise architecture
‣ Author of the aspect-oriented
framework Go! AOP 

http://go.aopphp.com
About me:
2
lisachenko
lisachenko
Agenda
3
Agenda
‣ Advantages of Object-Oriented Paradigm
3
Agenda
‣ Advantages of Object-Oriented Paradigm
‣ Limitations of OOP and how they affect our
application
3
Agenda
‣ Advantages of Object-Oriented Paradigm
‣ Limitations of OOP and how they affect our
application
‣ Existing object-oriented ways of solving
cross-cutting concerns
3
Agenda
‣ Advantages of Object-Oriented Paradigm
‣ Limitations of OOP and how they affect our
application
‣ Existing object-oriented ways of solving
cross-cutting concerns
‣ Pros and cons: the aspect-oriented
approach of solving cross-cutting concerns
3
Agenda
‣ Advantages of Object-Oriented Paradigm
‣ Limitations of OOP and how they affect our
application
‣ Existing object-oriented ways of solving
cross-cutting concerns
‣ Pros and cons: the aspect-oriented
approach of solving cross-cutting concerns
‣ Examples of using aspects in real life
applications
3
Текст
Object-Oriented Paradigm
Solution to the complexity
5
Modularity
We connect classes, components, bundles, and
frameworks.
6
Reusability
We use existing code to create new code on the
top.
7
Encapsulation
We hide implementation details from the outside
world.
8
Is it a silver bullet?
Object-Oriented Paradigm
8
Is it a silver bullet?
Object-Oriented Paradigm
8
Is it a silver bullet?
Object-Oriented Paradigm
Edsger W. Dijkstra
“Object-oriented programming is an
exceptionally bad idea which could
only have originated in California.”
9
Joe Armstrong
“…You wanted a banana but what you got
[with OOP] was a gorilla holding the banana
and the entire jungle”
10
What are the problems?
11
What are the problems?
‣ Limitation of object-oriented
representation of real life processes
11
What are the problems?
‣ Limitation of object-oriented
representation of real life processes
‣ Essential complexity results in strong
coupling between components
11
What are the problems?
‣ Limitation of object-oriented
representation of real life processes
‣ Essential complexity results in strong
coupling between components
‣ Essential complexity results in scattered
implementation of our concerns
11
Текст
Cross-cutting concerns
What they are and why we should think about
them
13
Cross-cutting concerns are
aspects of a program that affect
other concerns.
Cross-cutting concerns - why
they affect our code?
14
Task: Implement an audit system that checks
access permission for each public method over
all classes in our system and then logs this
information into the security journal.
Clean model
15
Authorization control…
16
Authorization control…
16
Logging and audit…
17
Logging and audit…
17
Logging and audit…
17
Error handling…
18
Error handling…
18
Code tangling
19
Code scattering
20
Текст
OOP ways
What do we have in OOP to fight cross-cutting
concerns?
Decorator
Design pattern that allows
behavior to be added to an
individual object, either
statically or dynamically,
without affecting the behavior
of other objects from the
same class.
22
23
23
23
23
Decorator
+ Respects LSP - We can pass an instance of a
decorator everywhere the original object is expected.
+ Keeps SRP for the original class because it doesn’t
contain secondary concerns now
- Too many decorator classes for each combination of
concern+concrete interface
- Secondary concerns (authorization, caching, etc.) are
scattered across all decorators
- Additional overhead for calling original methods
24
Mediator
Defines an object that
incapsulates all logic of
interactions between objects,
giving them the ability to
work without explicit
references to each other
25
26
26
26
27
27
27
Mediator
+ All secondary concerns can be moved to separate
classes without duplication (SRP for secondary
concerns)
+ Keeps SRP for the original class, because it doesn’t
contain secondary concerns now
+ The most flexible way of extending a system
- Requires specific changes in the original class to
perform notification of mediator
- Hard to debug code with complex logic of interaction
because there are no explicit links between objects
28
Текст
Take control of everything
What if we combine all the best features of the
decorator and mediator into the one pattern?
Aspect-Oriented Paradigm
A programming
paradigm that aims to
increase modularity by
allowing the separation
of cross-cutting
concerns
30
Go! AOP Framework
31
Go! AOP Framework
31
‣ Inspired by famous AspectJ and Spring
frameworks
Go! AOP Framework
31
‣ Inspired by famous AspectJ and Spring
frameworks
‣ Over 800 stargazers on Github - thank you!
Go! AOP Framework
31
‣ Inspired by famous AspectJ and Spring
frameworks
‣ Over 800 stargazers on Github - thank you!
‣ Over 200k installations on Packagist
Go! AOP Framework
31
‣ Inspired by famous AspectJ and Spring
frameworks
‣ Over 800 stargazers on Github - thank you!
‣ Over 200k installations on Packagist
‣ PHP5.6, PHP7.0 and Opcache compatible
Go! AOP Framework
31
‣ Inspired by famous AspectJ and Spring
frameworks
‣ Over 800 stargazers on Github - thank you!
‣ Over 200k installations on Packagist
‣ PHP5.6, PHP7.0 and Opcache compatible
‣ There are bridges for SF2, ZF2, Laravel…
Let’s take our clean code…
32
Let’s take our clean code…
32
Let’s take our clean code…
Method execution is an event
32
…and subscribe to our event
33
…and subscribe to our event
33
…and subscribe to our event
Pointcut - describes list of
interesting events
33
…and subscribe to our event
Pointcut - describes list of
interesting events
33
…and subscribe to our event
Pointcut - describes list of
interesting events
Joinpoint - defines an event
object
33
…and subscribe to our event
Pointcut - describes list of
interesting events
Joinpoint - defines an event
object
33
…and subscribe to our event
Pointcut - describes list of
interesting events
Joinpoint - defines an event
object
Advice - event handler
33
How it works
34
All aspects (or advisors) are registered in
the aspect kernel
How it works
35
The special php://filter stream filter is
registered via stream_filter_register()
How it works
36
The composer class loader is replaced
with a weaving proxy
How it works
37
Lexical analysis and parsing of AST is
performed (nikic/PHP-Parser)
How it works
38
Static reflection is created from the AST
(goaop/parser-reflection)
How it works
39
The original class is renamed and replaced with a
new class with additional behavior; stored in the
cache
How it works
39
The original class is renamed and replaced with a
new class with additional behavior; stored in the
cache
How it works
39
The original class is renamed and replaced with a
new class with additional behavior; stored in the
cache
Simple inheritance
How it works
39
The original class is renamed and replaced with a
new class with additional behavior; stored in the
cache
Simple inheritance
How it works
39
The original class is renamed and replaced with a
new class with additional behavior; stored in the
cache
Simple inheritance
Overridden method
Текст
Go! AOP joinpoints
What can be intercepted?
Method interceptors:
41
Method interceptors:
41
Can be a final class or a trait!
Property interceptors:
42
Logic interceptors:
43
AOP
+ Keeps SRP for the original class because it doesn’t
contain secondary concerns now
+ All secondary concerns are stored in separate classes
without duplication (SRP for secondary concerns)
+ Very flexible way of extending our system (like mediator
does)
+ Does not require changes in original classes
- No tools to debug AOP code; no help from IDE
- Overhead for AOP initialization and execution
44
Go! AOP: Debugging with
XDebug
45
Go! AOP: Debugging with
XDebug
45
Go! AOP: Plugin for the
PhpStorm
46
Pointcut syntax highlighting,
completion and analysis
47
Pointcut syntax highlighting,
completion and analysis
47
Navigate to advice/advised
elements
48
Navigate to advice/advised
elements
48
Текст
Circuit breaker
Prevents one failure from reoccurring
continuously
Logic of CircuitBreaker
50
Logic of CircuitBreaker
50
‣ For each public method execution we count
the number of failures in APC/Memcache.
Logic of CircuitBreaker
50
‣ For each public method execution we count
the number of failures in APC/Memcache.
‣ If the number of failures is too high, then we
break the circuit to prevent subsequent failures.
Logic of CircuitBreaker
50
‣ For each public method execution we count
the number of failures in APC/Memcache.
‣ If the number of failures is too high, then we
break the circuit to prevent subsequent failures.
‣ If the circuit is broken, then the original method
body should not be executed for the
configured amount of time.
Logic of CircuitBreaker
50
‣ For each public method execution we count
the number of failures in APC/Memcache.
‣ If the number of failures is too high, then we
break the circuit to prevent subsequent failures.
‣ If the circuit is broken, then the original method
body should not be executed for the
configured amount of time.
‣ https://github.com/ejsmont-artur/php-circuit-
breaker can be used.
Step 1. Define an annotation
51
Step 2. Define an aspect
52
Step 2. Define an aspect
53
Step 2. Define an aspect
53
All methods with «Fuse» annotation
Step 2. Define an aspect
53
All methods with «Fuse» annotation
Step 2. Define an aspect
53
All methods with «Fuse» annotation
Step 2. Define an aspect
53
All methods with «Fuse» annotation
Step 3. Use it in your code
54
Step 3. Use it in your code
54
More examples for AOP
55
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
‣ Feature toggle pattern
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
‣ Feature toggle pattern
‣ Authorization control
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
‣ Feature toggle pattern
‣ Authorization control
‣ Traditional caching, logging, transaction
control, security audit
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
‣ Feature toggle pattern
‣ Authorization control
‣ Traditional caching, logging, transaction
control, security audit
‣ Design by contract programming (Php-Deal
library)
More examples for AOP
55
‣ Profiling methods with pinba extension and
Intaro Pinboard
‣ Feature toggle pattern
‣ Authorization control
‣ Traditional caching, logging, transaction
control, security audit
‣ Design by contract programming (Php-Deal
library)
‣ Aspect-oriented testing (AspectMock)
Conclusion
56
Conclusion
56
‣ OOP is a nice tool for solving accidental
complexity but not for essential complexity.
Conclusion
56
‣ OOP is a nice tool for solving accidental
complexity but not for essential complexity.
‣ Pay attention to code scattering and code
tangling.
Conclusion
56
‣ OOP is a nice tool for solving accidental
complexity but not for essential complexity.
‣ Pay attention to code scattering and code
tangling.
‣ Try to extract secondary concerns into
separate classes via OOP decomposition for
small applications.
Conclusion
56
‣ OOP is a nice tool for solving accidental
complexity but not for essential complexity.
‣ Pay attention to code scattering and code
tangling.
‣ Try to extract secondary concerns into
separate classes via OOP decomposition for
small applications.
‣ Try to use AOP for complex enterprise
applications.
Thank you for the attention!
https://github.com/goaop
https://github.com/lisachenko
https://twitter.com/lisachenko

More Related Content

What's hot

Making ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and TypescriptMaking ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and TypescriptChristian Heilmann
 
Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點William Yeh
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...Joe Ferguson
 
Maven - Taming the Beast
Maven - Taming the BeastMaven - Taming the Beast
Maven - Taming the BeastRoberto Cortez
 
Client-side Development 2016
Client-side Development 2016Client-side Development 2016
Client-side Development 2016Huge
 
Why every startup built with Ruby on Rails has an upper hand over their compe...
Why every startup built with Ruby on Rails has an upper hand over their compe...Why every startup built with Ruby on Rails has an upper hand over their compe...
Why every startup built with Ruby on Rails has an upper hand over their compe...DreamToIPO
 
Jr devsurvivalguide
Jr devsurvivalguideJr devsurvivalguide
Jr devsurvivalguideJames York
 
Java EE 7 meets Java 8
Java EE 7 meets Java 8Java EE 7 meets Java 8
Java EE 7 meets Java 8Roberto Cortez
 
VCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopVCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopAnis Ahmad
 
Rubyslava debugging with_pry
Rubyslava debugging with_pryRubyslava debugging with_pry
Rubyslava debugging with_pryolahmichal
 
Becoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola PaolucciBecoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola PaolucciAtlassian
 
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...DevOpsDays Riga
 
Becoming fully buzzword compliant
Becoming fully buzzword compliantBecoming fully buzzword compliant
Becoming fully buzzword compliantTrisha Gee
 
Clean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithClean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithVictor Rentea
 
Using software modules welcome to hell!
Using software modules   welcome to hell!Using software modules   welcome to hell!
Using software modules welcome to hell!Baruch Sadogursky
 
Atlassian - Software For Every Team
Atlassian - Software For Every TeamAtlassian - Software For Every Team
Atlassian - Software For Every TeamSven Peters
 
Old and new perils of open source - Great Wide Open keynote
Old and new perils of open source - Great Wide Open keynoteOld and new perils of open source - Great Wide Open keynote
Old and new perils of open source - Great Wide Open keynoteChristian Heilmann
 
Practical DevOps & Continuous Delivery – A Webinar to learn in depth on DevO...
Practical DevOps & Continuous Delivery –  A Webinar to learn in depth on DevO...Practical DevOps & Continuous Delivery –  A Webinar to learn in depth on DevO...
Practical DevOps & Continuous Delivery – A Webinar to learn in depth on DevO...Hugo Messer
 

What's hot (20)

Making ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and TypescriptMaking ES6 available to all with ChakraCore and Typescript
Making ES6 available to all with ChakraCore and Typescript
 
Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點Monitoring 改造計畫:流程觀點
Monitoring 改造計畫:流程觀點
 
So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...So You Just Inherited a $Legacy Application...
So You Just Inherited a $Legacy Application...
 
Maven - Taming the Beast
Maven - Taming the BeastMaven - Taming the Beast
Maven - Taming the Beast
 
Client-side Development 2016
Client-side Development 2016Client-side Development 2016
Client-side Development 2016
 
Why every startup built with Ruby on Rails has an upper hand over their compe...
Why every startup built with Ruby on Rails has an upper hand over their compe...Why every startup built with Ruby on Rails has an upper hand over their compe...
Why every startup built with Ruby on Rails has an upper hand over their compe...
 
Jr devsurvivalguide
Jr devsurvivalguideJr devsurvivalguide
Jr devsurvivalguide
 
Java EE 7 meets Java 8
Java EE 7 meets Java 8Java EE 7 meets Java 8
Java EE 7 meets Java 8
 
VCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT WorkshopVCS for Teamwork - GIT Workshop
VCS for Teamwork - GIT Workshop
 
Rubyslava debugging with_pry
Rubyslava debugging with_pryRubyslava debugging with_pry
Rubyslava debugging with_pry
 
Becoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola PaolucciBecoming a Git Master - Nicola Paolucci
Becoming a Git Master - Nicola Paolucci
 
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
DevOpsDaysRiga 2018: Neil Crawford - Trunk based development, continuous depl...
 
php-1701-a
php-1701-aphp-1701-a
php-1701-a
 
Becoming fully buzzword compliant
Becoming fully buzzword compliantBecoming fully buzzword compliant
Becoming fully buzzword compliant
 
Clean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a MonolithClean Pragmatic Architecture - Avoiding a Monolith
Clean Pragmatic Architecture - Avoiding a Monolith
 
Using software modules welcome to hell!
Using software modules   welcome to hell!Using software modules   welcome to hell!
Using software modules welcome to hell!
 
Can you TDD Rails?
Can you TDD Rails?Can you TDD Rails?
Can you TDD Rails?
 
Atlassian - Software For Every Team
Atlassian - Software For Every TeamAtlassian - Software For Every Team
Atlassian - Software For Every Team
 
Old and new perils of open source - Great Wide Open keynote
Old and new perils of open source - Great Wide Open keynoteOld and new perils of open source - Great Wide Open keynote
Old and new perils of open source - Great Wide Open keynote
 
Practical DevOps & Continuous Delivery – A Webinar to learn in depth on DevO...
Practical DevOps & Continuous Delivery –  A Webinar to learn in depth on DevO...Practical DevOps & Continuous Delivery –  A Webinar to learn in depth on DevO...
Practical DevOps & Continuous Delivery – A Webinar to learn in depth on DevO...
 

Viewers also liked

Weaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryWeaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryAlexander Lisachenko
 
Building Big Architectures
Building Big ArchitecturesBuilding Big Architectures
Building Big ArchitecturesRamit Surana
 
Lean publishing "Principles of Package Design"
Lean publishing "Principles of Package Design"Lean publishing "Principles of Package Design"
Lean publishing "Principles of Package Design"Matthias Noback
 
PHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitecturePHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitectureiMasters
 
Demystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPDemystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPAlena Holligan
 
Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Bozhidar Boshnakov
 
Simple Web Services with PHP
Simple Web Services with PHPSimple Web Services with PHP
Simple Web Services with PHPJohn Paul Ada
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp
 
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016Alexandre Brandão Lustosa
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性Xuefeng Zhang
 
Microservices: Where do they fit within a rapidly evolving integration archit...
Microservices: Where do they fit within a rapidly evolving integration archit...Microservices: Where do they fit within a rapidly evolving integration archit...
Microservices: Where do they fit within a rapidly evolving integration archit...Kim Clark
 
CONCEPTUAL FRAMEWORK
CONCEPTUAL FRAMEWORKCONCEPTUAL FRAMEWORK
CONCEPTUAL FRAMEWORKlendiibanez22
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationAndrew Rota
 
Process Oriented Architecture
Process Oriented ArchitectureProcess Oriented Architecture
Process Oriented ArchitectureAlan McSweeney
 

Viewers also liked (15)

Weaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP libraryWeaving aspects in PHP with the help of Go! AOP library
Weaving aspects in PHP with the help of Go! AOP library
 
Building Big Architectures
Building Big ArchitecturesBuilding Big Architectures
Building Big Architectures
 
Lean publishing "Principles of Package Design"
Lean publishing "Principles of Package Design"Lean publishing "Principles of Package Design"
Lean publishing "Principles of Package Design"
 
PHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented ArchitecturePHP Experience 2016 - ROA – Resource Oriented Architecture
PHP Experience 2016 - ROA – Resource Oriented Architecture
 
Demystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHPDemystifying Object-Oriented Programming - Lone Star PHP
Demystifying Object-Oriented Programming - Lone Star PHP
 
Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)Object-Oriented Programming with PHP (part 1)
Object-Oriented Programming with PHP (part 1)
 
Simple Web Services with PHP
Simple Web Services with PHPSimple Web Services with PHP
Simple Web Services with PHP
 
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисыWebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
WebCamp 2016: PHP. Николай Паламарчук: PHP и микросервисы
 
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
PHP with Service BUS (RabbitMQ/Redis/MongoDB) - IMasters PHP Experience 2016
 
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性浅谈电商网站数据访问层(DAL)与 ORM 之适用性
浅谈电商网站数据访问层(DAL)与 ORM 之适用性
 
Microservices: Where do they fit within a rapidly evolving integration archit...
Microservices: Where do they fit within a rapidly evolving integration archit...Microservices: Where do they fit within a rapidly evolving integration archit...
Microservices: Where do they fit within a rapidly evolving integration archit...
 
CONCEPTUAL FRAMEWORK
CONCEPTUAL FRAMEWORKCONCEPTUAL FRAMEWORK
CONCEPTUAL FRAMEWORK
 
Integrating React.js Into a PHP Application
Integrating React.js Into a PHP ApplicationIntegrating React.js Into a PHP Application
Integrating React.js Into a PHP Application
 
Process Oriented Architecture
Process Oriented ArchitectureProcess Oriented Architecture
Process Oriented Architecture
 
Chapter 6-THEORETICAL & CONCEPTUAL FRAMEWORK
Chapter 6-THEORETICAL & CONCEPTUAL FRAMEWORKChapter 6-THEORETICAL & CONCEPTUAL FRAMEWORK
Chapter 6-THEORETICAL & CONCEPTUAL FRAMEWORK
 

Similar to Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016

Solving cross cutting concerns in PHP - PHPSerbia-2017
Solving cross cutting concerns in PHP - PHPSerbia-2017Solving cross cutting concerns in PHP - PHPSerbia-2017
Solving cross cutting concerns in PHP - PHPSerbia-2017Alexander Lisachenko
 
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...Dan Cundiff
 
Raising ux bar with offline first design
Raising ux bar with offline first designRaising ux bar with offline first design
Raising ux bar with offline first designKyrylo Reznykov
 
Performance tips for Symfony2 & PHP
Performance tips for Symfony2 & PHPPerformance tips for Symfony2 & PHP
Performance tips for Symfony2 & PHPMax Romanovsky
 
Putting legacy to REST with middleware
Putting legacy to REST with middlewarePutting legacy to REST with middleware
Putting legacy to REST with middlewareAdam Culp
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your MicroservicesMarcus Hirt
 
Explainability for Learning to Rank
Explainability for Learning to RankExplainability for Learning to Rank
Explainability for Learning to RankSease
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2LiviaLiaoFontech
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflectionkim.mens
 
Using Pony for Fintech
Using Pony for FintechUsing Pony for Fintech
Using Pony for FintechC4Media
 
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in Firmware
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in FirmwareUsing Static Binary Analysis To Find Vulnerabilities And Backdoors in Firmware
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in FirmwareLastline, Inc.
 
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...Chris Hammerschmidt
 
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit EbnerThe NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit EbnerNRB
 
The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)Stefan Koopmanschap
 
The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)Stefan Koopmanschap
 
Growing as a software craftsperson (part 2) From Pune Software Craftsmanship
Growing as a software craftsperson (part 2) From Pune Software CraftsmanshipGrowing as a software craftsperson (part 2) From Pune Software Craftsmanship
Growing as a software craftsperson (part 2) From Pune Software CraftsmanshipDattatray Kale
 
DockerCon SF 2019 - Observability Workshop
DockerCon SF 2019 - Observability WorkshopDockerCon SF 2019 - Observability Workshop
DockerCon SF 2019 - Observability WorkshopKevin Crawley
 
So You Just Inherited a $Legacy Application… NomadPHP July 2016
So You Just Inherited a $Legacy Application… NomadPHP July 2016So You Just Inherited a $Legacy Application… NomadPHP July 2016
So You Just Inherited a $Legacy Application… NomadPHP July 2016Joe Ferguson
 

Similar to Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016 (20)

Solving cross cutting concerns in PHP - PHPSerbia-2017
Solving cross cutting concerns in PHP - PHPSerbia-2017Solving cross cutting concerns in PHP - PHPSerbia-2017
Solving cross cutting concerns in PHP - PHPSerbia-2017
 
More about PHP
More about PHPMore about PHP
More about PHP
 
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...
Splunk All the Things: Our First 3 Months Monitoring Web Service APIs - Splun...
 
Raising ux bar with offline first design
Raising ux bar with offline first designRaising ux bar with offline first design
Raising ux bar with offline first design
 
Performance tips for Symfony2 & PHP
Performance tips for Symfony2 & PHPPerformance tips for Symfony2 & PHP
Performance tips for Symfony2 & PHP
 
Putting legacy to REST with middleware
Putting legacy to REST with middlewarePutting legacy to REST with middleware
Putting legacy to REST with middleware
 
Diagnose Your Microservices
Diagnose Your MicroservicesDiagnose Your Microservices
Diagnose Your Microservices
 
Explainability for Learning to Rank
Explainability for Learning to RankExplainability for Learning to Rank
Explainability for Learning to Rank
 
2021.laravelconf.tw.slides2
2021.laravelconf.tw.slides22021.laravelconf.tw.slides2
2021.laravelconf.tw.slides2
 
Let's Get to the Rapids
Let's Get to the RapidsLet's Get to the Rapids
Let's Get to the Rapids
 
Basics of reflection
Basics of reflectionBasics of reflection
Basics of reflection
 
Using Pony for Fintech
Using Pony for FintechUsing Pony for Fintech
Using Pony for Fintech
 
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in Firmware
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in FirmwareUsing Static Binary Analysis To Find Vulnerabilities And Backdoors in Firmware
Using Static Binary Analysis To Find Vulnerabilities And Backdoors in Firmware
 
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...
Machine Learning for (DF)IR with Velociraptor: From Setting Expectations to a...
 
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit EbnerThe NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
The NRB Group mainframe day 2021 - DevOps on Z - Jerome Klimm - Benoit Ebner
 
The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)The Power Of Refactoring (PHPCon Italia)
The Power Of Refactoring (PHPCon Italia)
 
The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)The Power Of Refactoring (php|tek 09)
The Power Of Refactoring (php|tek 09)
 
Growing as a software craftsperson (part 2) From Pune Software Craftsmanship
Growing as a software craftsperson (part 2) From Pune Software CraftsmanshipGrowing as a software craftsperson (part 2) From Pune Software Craftsmanship
Growing as a software craftsperson (part 2) From Pune Software Craftsmanship
 
DockerCon SF 2019 - Observability Workshop
DockerCon SF 2019 - Observability WorkshopDockerCon SF 2019 - Observability Workshop
DockerCon SF 2019 - Observability Workshop
 
So You Just Inherited a $Legacy Application… NomadPHP July 2016
So You Just Inherited a $Legacy Application… NomadPHP July 2016So You Just Inherited a $Legacy Application… NomadPHP July 2016
So You Just Inherited a $Legacy Application… NomadPHP July 2016
 

Recently uploaded

GESCO SE Press and Analyst Conference on Financial Results 2024
GESCO SE Press and Analyst Conference on Financial Results 2024GESCO SE Press and Analyst Conference on Financial Results 2024
GESCO SE Press and Analyst Conference on Financial Results 2024GESCO SE
 
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATION
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATIONRACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATION
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATIONRachelAnnTenibroAmaz
 
INDIAN GCP GUIDELINE. for Regulatory affair 1st sem CRR
INDIAN GCP GUIDELINE. for Regulatory  affair 1st sem CRRINDIAN GCP GUIDELINE. for Regulatory  affair 1st sem CRR
INDIAN GCP GUIDELINE. for Regulatory affair 1st sem CRRsarwankumar4524
 
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunity
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunityDon't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunity
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunityApp Ethena
 
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08LloydHelferty
 
Testing with Fewer Resources: Toward Adaptive Approaches for Cost-effective ...
Testing with Fewer Resources:  Toward Adaptive Approaches for Cost-effective ...Testing with Fewer Resources:  Toward Adaptive Approaches for Cost-effective ...
Testing with Fewer Resources: Toward Adaptive Approaches for Cost-effective ...Sebastiano Panichella
 
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptxerickamwana1
 
Application of GIS in Landslide Disaster Response.pptx
Application of GIS in Landslide Disaster Response.pptxApplication of GIS in Landslide Disaster Response.pptx
Application of GIS in Landslide Disaster Response.pptxRoquia Salam
 
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...soumyapottola
 
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...Sebastiano Panichella
 
Engaging Eid Ul Fitr Presentation for Kindergartners.pptx
Engaging Eid Ul Fitr Presentation for Kindergartners.pptxEngaging Eid Ul Fitr Presentation for Kindergartners.pptx
Engaging Eid Ul Fitr Presentation for Kindergartners.pptxAsifArshad8
 
Scootsy Overview Deck - Pan City Delivery
Scootsy Overview Deck - Pan City DeliveryScootsy Overview Deck - Pan City Delivery
Scootsy Overview Deck - Pan City Deliveryrishi338139
 
cse-csp batch4 review-1.1.pptx cyber security
cse-csp batch4 review-1.1.pptx cyber securitycse-csp batch4 review-1.1.pptx cyber security
cse-csp batch4 review-1.1.pptx cyber securitysandeepnani2260
 
General Elections Final Press Noteas per M
General Elections Final Press Noteas per MGeneral Elections Final Press Noteas per M
General Elections Final Press Noteas per MVidyaAdsule1
 

Recently uploaded (14)

GESCO SE Press and Analyst Conference on Financial Results 2024
GESCO SE Press and Analyst Conference on Financial Results 2024GESCO SE Press and Analyst Conference on Financial Results 2024
GESCO SE Press and Analyst Conference on Financial Results 2024
 
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATION
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATIONRACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATION
RACHEL-ANN M. TENIBRO PRODUCT RESEARCH PRESENTATION
 
INDIAN GCP GUIDELINE. for Regulatory affair 1st sem CRR
INDIAN GCP GUIDELINE. for Regulatory  affair 1st sem CRRINDIAN GCP GUIDELINE. for Regulatory  affair 1st sem CRR
INDIAN GCP GUIDELINE. for Regulatory affair 1st sem CRR
 
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunity
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunityDon't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunity
Don't Miss Out: Strategies for Making the Most of the Ethena DigitalOpportunity
 
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08
Sunlight Spectacle 2024 Practical Action Launch Event 2024-04-08
 
Testing with Fewer Resources: Toward Adaptive Approaches for Cost-effective ...
Testing with Fewer Resources:  Toward Adaptive Approaches for Cost-effective ...Testing with Fewer Resources:  Toward Adaptive Approaches for Cost-effective ...
Testing with Fewer Resources: Toward Adaptive Approaches for Cost-effective ...
 
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx
05.02 MMC - Assignment 4 - Image Attribution Lovepreet.pptx
 
Application of GIS in Landslide Disaster Response.pptx
Application of GIS in Landslide Disaster Response.pptxApplication of GIS in Landslide Disaster Response.pptx
Application of GIS in Landslide Disaster Response.pptx
 
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...
Understanding Post Production changes (PPC) in Clinical Data Management (CDM)...
 
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...
Testing and Development Challenges for Complex Cyber-Physical Systems: Insigh...
 
Engaging Eid Ul Fitr Presentation for Kindergartners.pptx
Engaging Eid Ul Fitr Presentation for Kindergartners.pptxEngaging Eid Ul Fitr Presentation for Kindergartners.pptx
Engaging Eid Ul Fitr Presentation for Kindergartners.pptx
 
Scootsy Overview Deck - Pan City Delivery
Scootsy Overview Deck - Pan City DeliveryScootsy Overview Deck - Pan City Delivery
Scootsy Overview Deck - Pan City Delivery
 
cse-csp batch4 review-1.1.pptx cyber security
cse-csp batch4 review-1.1.pptx cyber securitycse-csp batch4 review-1.1.pptx cyber security
cse-csp batch4 review-1.1.pptx cyber security
 
General Elections Final Press Noteas per M
General Elections Final Press Noteas per MGeneral Elections Final Press Noteas per M
General Elections Final Press Noteas per M
 

Solving Cross-Cutting Concerns in PHP - DutchPHP Conference 2016