Top Banner
Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011
96

Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Jul 14, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application ArchitectureDPC 2011

Kore Nordmann (@koredn)Tobias Schlitt (@tobySen)

May 21, 2011

Page 2: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 2 / 40

About us

I Degree in computer sience in 2010

I Each more than 10 years of professional PHP

I Open source enthusiasts

I Contributing to various FLOSS projects

I 2 of 3 founders of Qafoo GmbH, which providesServices all around high quality PHP

Page 3: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 3 / 40

Outline

Motivation

Resources

Approaches

Real world

Summary

Page 4: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 4 / 40

Application

Application

Component Component Component

Page 5: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 5 / 40

Modules

Application

Component Component Component

Module Module Module Module Module

Page 6: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 6 / 40

Why modules?

I Need for customizationI Custom setup for customersI 3rd party extensions

I Develop modules seperately from main applicationI External developersI Seperate release cycles

I Slag the main applicationI Raise maintainability

Page 7: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 6 / 40

Why modules?

I Need for customizationI Custom setup for customersI 3rd party extensions

I Develop modules seperately from main applicationI External developersI Seperate release cycles

I Slag the main applicationI Raise maintainability

Page 8: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 6 / 40

Why modules?

I Need for customizationI Custom setup for customersI 3rd party extensions

I Develop modules seperately from main applicationI External developersI Seperate release cycles

I Slag the main applicationI Raise maintainability

Page 9: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 7 / 40

Essential

Page 10: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 8 / 40

Challenges

I Module structure

I Registration / configuration

I Handling ressources

I Interaction with core

Page 11: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 8 / 40

Challenges

I Module structure X

I Registration / configuration

I Handling ressources

I Interaction with core

Page 12: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 8 / 40

Challenges

I Module structure X

I Registration / configuration X

I Handling ressources

I Interaction with core

Page 13: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 8 / 40

Challenges

I Module structure X

I Registration / configuration X

I Handling ressources −→I Interaction with core

Page 14: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 8 / 40

Challenges

I Module structure X

I Registration / configuration X

I Handling ressources −→I Interaction with core =⇒

Page 15: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 9 / 40

Outline

Motivation

Resources

Approaches

Real world

Summary

Page 16: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 10 / 40

Dealing with resources

I Typical module resourcesI TemplatesI TranslationsI ImagesI CSS

I Resources handled by code are “easy”I Register “overrides“

I Static file resources are notI Put modules in a web accessible path?I Copy / link static files to htdocs/ ?I Pipe static files through PHP?I Webserver configuration?

Page 17: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 10 / 40

Dealing with resources

I Typical module resourcesI TemplatesI TranslationsI ImagesI CSS

I Resources handled by code are “easy”I Register “overrides“

I Static file resources are notI Put modules in a web accessible path?I Copy / link static files to htdocs/ ?I Pipe static files through PHP?I Webserver configuration?

Page 18: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 10 / 40

Dealing with resources

I Typical module resourcesI TemplatesI TranslationsI ImagesI CSS

I Resources handled by code are “easy”I Register “overrides“

I Static file resources are notI Put modules in a web accessible path?I Copy / link static files to htdocs/ ?I Pipe static files through PHP?I Webserver configuration?

Page 19: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 11 / 40

Outline

Motivation

Resources

Approaches

Real world

Summary

Page 20: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 12 / 40

Event handling

I Interaction

I Modules register forevent types

I Events “thrown” (bycore or module)

I Registered modulesinformed about event(maybe including data)

I Optionally transparent

Application

Module

Module

Module

Event

Page 21: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 12 / 40

Event handling

I Interaction

I Modules register forevent types

I Events “thrown” (bycore or module)

I Registered modulesinformed about event(maybe including data)

I Optionally transparent

Application

Module

Module

Module

Event

Page 22: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 12 / 40

Event handling

I Interaction

I Modules register forevent types

I Events “thrown” (bycore or module)

I Registered modulesinformed about event(maybe including data)

I Optionally transparent

Application

Module

Module

Module

Event

Page 23: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 12 / 40

Event handling

I Interaction

I Modules register forevent types

I Events “thrown” (bycore or module)

I Registered modulesinformed about event(maybe including data)

I Optionally transparent

Application

Module

Module

Module

Event

Page 24: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 12 / 40

Event handling

I Interaction

I Modules register forevent types

I Events “thrown” (bycore or module)

I Registered modulesinformed about event(maybe including data)

I Optionally transparent

Application

Module

Module

Module

Event

Page 25: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 13 / 40

Data handling

I Data processingI Pipes

I Transport data

I FiltersI Manipulate data

Filter 3

Filter 2

Filter 1

Data

Data

Pipe

Pipe

Page 26: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 13 / 40

Data handling

I Data processingI Pipes

I Transport data

I FiltersI Manipulate data

Filter 3

Filter 2

Filter 1

Data

Data

Pipe

Pipe

Page 27: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 13 / 40

Data handling

I Data processingI Pipes

I Transport data

I FiltersI Manipulate data

Filter 3

Filter 2

Filter 1

Data

Data

Pipe

Pipe

Page 28: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 14 / 40

Outline

Motivation

Resources

Approaches

Real world

Summary

Page 29: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 15 / 40

Outline

Real worldPipes & FiltersEventsOthers

Page 30: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 16 / 40

Popoon

1 <?xml v e r s i o n=” 1 .0 ”?>23 <map:s i temap xmlns:map=” h t t p : // apache . org / cocoon/ s i t emap /1 .0 ”>4 <map : p i p e l i n e s>5 <map : p i p e l i n e>6 <map:match type=” u r i ” p a t t e r n=” examples . tgz ”>7 <map:read type=” tgz ” s r c=” . ” name=” examples . tgz ”/>8 </map:match>9 </ map : p i p e l i n e>

1011 <map : p i p e l i n e >12 <map:gene ra te type=” xm l f i l e ” s r c=” examples . xml”/>13 <map: t rans fo rm type=” l i b x s l t ” s r c=” examples . x s l ”/>14 <ma p : s e r i a l i z e type=”html ”/>15 </ map : p i p e l i n e>16 </ map : p i p e l i n e s>17 </map:s i temap>

Page 31: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 16 / 40

Popoon

1 <?xml v e r s i o n=” 1 .0 ”?>23 <map:s i temap xmlns:map=” h t t p : // apache . org / cocoon/ s i t emap /1 .0 ”>4 <map : p i p e l i n e s>5 <map : p i p e l i n e>6 <map:match type=” u r i ” p a t t e r n=” examples . tgz ”>7 <map:read type=” tgz ” s r c=” . ” name=” examples . tgz ”/>8 </map:match>9 </ map : p i p e l i n e>

1011 <map : p i p e l i n e >12 <map:gene ra te type=” xm l f i l e ” s r c=” examples . xml”/>13 <map: t rans fo rm type=” l i b x s l t ” s r c=” examples . x s l ”/>14 <ma p : s e r i a l i z e type=”html ”/>15 </ map : p i p e l i n e>16 </ map : p i p e l i n e s>17 </map:s i temap>

Page 32: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 16 / 40

Popoon

1 <?xml v e r s i o n=” 1 .0 ”?>23 <map:s i temap xmlns:map=” h t t p : // apache . org / cocoon/ s i t emap /1 .0 ”>4 <map : p i p e l i n e s>5 <map : p i p e l i n e>6 <map:match type=” u r i ” p a t t e r n=” examples . tgz ”>7 <map:read type=” tgz ” s r c=” . ” name=” examples . tgz ”/>8 </map:match>9 </ map : p i p e l i n e>

1011 <map : p i p e l i n e >12 <map:gene ra te type=” xm l f i l e ” s r c=” examples . xml”/>13 <map: t rans fo rm type=” l i b x s l t ” s r c=” examples . x s l ”/>14 <ma p : s e r i a l i z e type=”html ”/>15 </ map : p i p e l i n e>16 </ map : p i p e l i n e s>17 </map:s i temap>

Page 33: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 16 / 40

Popoon

1 <?xml v e r s i o n=” 1 .0 ”?>23 <map:s i temap xmlns:map=” h t t p : // apache . org / cocoon/ s i t emap /1 .0 ”>4 <map : p i p e l i n e s>5 <map : p i p e l i n e>6 <map:match type=” u r i ” p a t t e r n=” examples . tgz ”>7 <map:read type=” tgz ” s r c=” . ” name=” examples . tgz ”/>8 </map:match>9 </ map : p i p e l i n e>

1011 <map : p i p e l i n e >12 <map:gene ra te type=” xm l f i l e ” s r c=” examples . xml”/>13 <map: t rans fo rm type=” l i b x s l t ” s r c=” examples . x s l ”/>14 <ma p : s e r i a l i z e type=”html ”/>15 </ map : p i p e l i n e>16 </ map : p i p e l i n e s>17 </map:s i temap>

Page 34: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 16 / 40

Popoon

1 <?xml v e r s i o n=” 1 .0 ”?>23 <map:s i temap xmlns:map=” h t t p : // apache . org / cocoon/ s i t emap /1 .0 ”>4 <map : p i p e l i n e s>5 <map : p i p e l i n e>6 <map:match type=” u r i ” p a t t e r n=” examples . tgz ”>7 <map:read type=” tgz ” s r c=” . ” name=” examples . tgz ”/>8 </map:match>9 </ map : p i p e l i n e>

1011 <map : p i p e l i n e >12 <map:gene ra te type=” xm l f i l e ” s r c=” examples . xml”/>13 <map: t rans fo rm type=” l i b x s l t ” s r c=” examples . x s l ”/>14 <ma p : s e r i a l i z e type=”html ”/>15 </ map : p i p e l i n e>16 </ map : p i p e l i n e s>17 </map:s i temap>

Page 35: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 17 / 40

Pro & Contra

I Benefits:I Clean architectural approachI Might gain high re-usability

I Drawbacks:I Filters might break data easilyI Somewhat forces linear code flow

Page 36: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 17 / 40

Pro & Contra

I Benefits:I Clean architectural approachI Might gain high re-usability

I Drawbacks:I Filters might break data easilyI Somewhat forces linear code flow

Page 37: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 17 / 40

Pro & Contra

I Benefits:I Clean architectural approachI Might gain high re-usability

I Drawbacks:I Filters might break data easilyI Somewhat forces linear code flow

Page 38: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 17 / 40

Pro & Contra

I Benefits:I Clean architectural approachI Might gain high re-usability

I Drawbacks:I Filters might break data easilyI Somewhat forces linear code flow

Page 39: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 17 / 40

Pro & Contra

I Benefits:I Clean architectural approachI Might gain high re-usability

I Drawbacks:I Filters might break data easilyI Somewhat forces linear code flow

Page 40: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 18 / 40

Outline

Real worldPipes & FiltersEventsOthers

Page 41: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 19 / 40

Subject-Observer

1 <?php23 c l a s s Sub j e c t4 {5 pub l i c f un c t i o n doSomething ( )6 {7 $ t h i s−>n o t i f y ( ’ doSometh ingSta r t ’ ) ;8 // . . .9 $ t h i s−>n o t i f y ( ’ doSomethingEnd ’ ) ;

10 }11 }

Page 42: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 20 / 40

Subject-Observer

1 <?php23 c l a s s Sub j e c t4 {5 pro tec ted $ o b s e r v e r s = a r r a y ( ) ;67 pub l i c f un c t i o n addObserve r ( Obse rve r $ ob s e r v e r )8 {9 $ t h i s−>o b s e r v e r s [ ] = $ob s e r v e r ;

10 }1112 pub l i c f un c t i o n n o t i f y ( $event , $data = n u l l )13 {14 f o r e a c h ( $ t h i s−>o b s e r v e r s as $ ob s e r v e r )15 {16 $obs e r v e r−>$event ( $data ) ;17 }18 }1920 pub l i c f un c t i o n doSomething ( )21 {22 $ t h i s−>n o t i f y ( ’ doSometh ingSta r t ’ ) ;23 // . . .24 $ t h i s−>n o t i f y ( ’ doSomethingEnd ’ ) ;25 }26 }

Page 43: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 21 / 40

Subject-Observer

1 <?php

3 c l a s s Obse rve r4 {5 pub l i c f un c t i o n doSometh ingSta r t ( )6 {7 // . . .8 }9

10 pub l i c f un c t i o n doSomethingEnd ( )11 {12 // . . .13 }14 }

Page 44: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 45: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 46: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 47: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 48: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 49: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 50: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 22 / 40

Pro & Contra

I Benefits:I Transparent – any number of observers can registerI (Documented) clearly defined extension APII . . . optionally with clearly defined transmitted data structs

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defined extension pointsI Requires implementation in each subject

Page 51: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 23 / 40

Signal slot

1 <?php23 $hand l e r = new a r b i t S i g n a l S l o t ( ) ;45 $hand l e r−>r e g i s t e r ( ’ s i g n a lA ’ , a r r a y ( new myModule ( ) , ’ h and l eS i gna lA ’ ) ) ;6 $hand l e r−>r e g i s t e r ( ’ s i g n a lA ’ , a r r a y ( new yourModule ( ) , ’ h and l eS i gna lA ’ ) ) ;78 // I n module c9 $hand l e r−>emit ( ’ s i g n a lA ’ , new s i g na lADa t aS t r u c t ( /∗ . . . ∗/ ) ) ;

1011 // Now a l l modules r e g i s t e r d f o r t h i s s i g n a l a r e c a l l e d wi th the p r o v i d ed data12 c l a s s myModule13 {14 pub l i c f un c t i o n hand l eS i gna lA ( $name , s i g na lADa t aS t r u c t $data )15 {16 // . . .17 }18 }

Page 52: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 53: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 54: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 55: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 56: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 57: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 58: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 24 / 40

Pro & Contra

I Benefits:I Fully transparent – nobody needs to know who is calledI (Documented) clearly defiend extension APII . . . optionally with clearly defined transmitted data structsI Can easily be made asynchronous

I Drawbacks:I Fully transparent – you have no idea how long a singal will

take to processI Limited to defiend extension points

Page 59: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 25 / 40

Outline

Real worldPipes & FiltersEventsOthers

Page 60: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 26 / 40

Serendipity hook announcement

1 <?php23 // . . . i n CSS code . . .45 // $out i s CSS s t r i n g6 s e r e n d i p i t y p l u g i n a p i : : hook even t ( $cs s hook , $out ) ;78 echo $out ;9

10 // . . . i n e n t r y d i s p l a y code . . .1112 // $en t r y i s b l og e n t r y13 // $addData i s meta data14 s e r e n d i p i t y p l u g i n a p i : : hook even t ( ’ f r o n t e n d d i s p l a y ’ , $ent ry , $addData ) ;

Page 61: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 27 / 40

Serendipity hook reaction

18 f u n c t i o n even t hook ( $event , &$bag , &$eventData ) {19 g l o b a l $ s e r e n d i p i t y ;2021 $hooks = &$bag−>get ( ’ e v en t hook s ’ ) ;2223 i f ( i s s e t ( $hooks [ $event ] ) ) {24 sw i tch ( $event ) {25 case ’ f r o n t e n d d i s p l a y ’ :26 i f ( $ c o nd i t i o n /∗ . . . ∗/ ) {27 $e lement = $temp [ ’ e l ement ’ ] ;28 $eventData [ $e lement ] = $ th i s−>bbcode (29 $eventData [ $e lement ]30 ) ;31 }32 r e t u r n t rue ;33 break ;

Page 62: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 28 / 40

Serendipity hook reaction

18 f u n c t i o n even t hook ( $event , &$bag , &$eventData ) {19 g l o b a l $ s e r e n d i p i t y ;2021 $hooks = &$bag−>get ( ’ e v en t hook s ’ ) ;2223 i f ( i s s e t ( $hooks [ $event ] ) ) {24 sw i tch ( $event ) {35 case ’ c s s ’ :36 i f ( s t r p o s ( $eventData , ’ . bb−code ’ ) !== f a l s e ) {37 // c l a s s e x i s t s i n CSS , so a u s e r has cus tomized i t and

we don ’ t need d e f a u l t38 r e t u r n t rue ;39 }40 ?>41 . bb−quote , . bb−code , . bb−php , . bb−code−t i t l e , . bb−php−t i t l e {42 margin−l e f t : 20px ;43 margin−r i g h t : 20px ;44 /∗ . . . ∗/45 }46 /∗ . . . ∗/47 <?php48 r e t u r n t rue ;49 break ;

Page 63: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 64: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 65: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 66: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 67: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 68: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 29 / 40

Pro & Contra

I Benefits:I High flexibilityI Low coding efforts

I Drawbacks:I Plugin can easily break hook dataI No defined data formatsI “Liskov substitution principle” limits what you are allowed to

do

Page 69: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 30 / 40

Patching the source

I The naive approachI Works suprisingly well for some of the largest module

ecosystems: phpBB

Page 70: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 30 / 40

Patching the source

I The naive approachI Works suprisingly well for some of the largest module

ecosystems: phpBB

Page 71: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 31 / 40

phpBB MODx format

1 <?xml v e r s i o n=” 1 .0 ” encod ing=” ut f−8” s tanda lone=” yes ” ?>2 <?xml−s t y l e s h e e t type=” t e x t / x s l ” h r e f=” 1 . 2 . 0 /modx . p r o s i l v e r . en . x s l ”?>

3 <mod xm l n s : x s i=” h t t p : //www.w3 . org /2001/XMLSchema−i n s t a n c e ” xmlns=” h t t p : //www.phpbb . com/mods/xml/modx−1 .2 .0 . xsd ”>

4 <heade r>

42 </ heade r>

43 <open s r c=” i ndex . php”>44 <e d i t>45 <comment l ang=”en”>Here i s a comment</comment>46 <comment l ang=” n l ”>Hie r i s een s t u k j e commentaar</comment>47 <f i n d>t e x t to f i n d</ f i n d>48 <a c t i o n type=” r ep l a c e−with ”>t e x t to be r e p l a c e d wi th</ a c t i o n>49 </ e d i t>50 <e d i t>51 <f i n d>t e x t to f i n d</ f i n d>52 <a c t i o n type=” a f t e r−add”>t e x t to be added on the l i n e a f t e r</

a c t i o n>53 </ e d i t>54 <e d i t>55 <f i n d>t e x t to f i n d</ f i n d>56 <a c t i o n type=” be fo r e−add”>t e x t to be added on the l i n e b e f o r e</

a c t i o n>57 </ e d i t>

Page 72: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 73: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 74: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 75: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 76: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 77: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 32 / 40

Pro & Contra

I Benefits:I Trivial to get started with (high “hackability”)I You can change anything

I Drawbacks:I Will definitely breakI Can lead to unparsable codeI Complex modules require deep knowledge

Page 78: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 33 / 40

Inheritance

I Generally: Use Aggregation instead of inheritance for codere-use.

I Oxid eSales (OS shop software) has an interesting extensionmodel build entirely on inheritance

I Any number of modules can inherit from “any” class . . .I . . . and each inheriting class will be used anywhere the original

object would be used.I How can that be possible?

Page 79: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 33 / 40

Inheritance

I Generally: Use Aggregation instead of inheritance for codere-use.

I Oxid eSales (OS shop software) has an interesting extensionmodel build entirely on inheritance

I Any number of modules can inherit from “any” class . . .I . . . and each inheriting class will be used anywhere the original

object would be used.I How can that be possible?

Page 80: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 33 / 40

Inheritance

I Generally: Use Aggregation instead of inheritance for codere-use.

I Oxid eSales (OS shop software) has an interesting extensionmodel build entirely on inheritance

I Any number of modules can inherit from “any” class . . .I . . . and each inheriting class will be used anywhere the original

object would be used.I How can that be possible?

Page 81: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 33 / 40

Inheritance

I Generally: Use Aggregation instead of inheritance for codere-use.

I Oxid eSales (OS shop software) has an interesting extensionmodel build entirely on inheritance

I Any number of modules can inherit from “any” class . . .I . . . and each inheriting class will be used anywhere the original

object would be used.I How can that be possible?

Page 82: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 34 / 40

Modular inheritance

I Objects are instantiated with a special function instead of thenew operator.

I Inheritance graph is created on-the-fly by generatingintemediate classes

Page 83: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 35 / 40

Example1 <?php23 c l a s s o xA r t i c l e4 {5 pub l i c f un c t i o n c a l c u l a t e P r i c e ( )6 {7 // . . .8 }9 }

1011 c l a s s myAr t i c l e12 extends o xA r t i c l e13 {14 // . . .15 }1617 c l a s s y o u r A r t i c l e18 extends o xA r t i c l e19 {20 // . . .21 }

oxArticle

myArticle

yourArticle

Page 84: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 36 / 40

Example1 <?php23 c l a s s o xA r t i c l e4 {5 pub l i c f un c t i o n c a l c u l a t e P r i c e ( )6 {7 // . . .8 }9 }

1011 c l a s s myAr t i c l e12 extends myA r t i c l e p a r e n t13 {14 // . . .15 }1617 c l a s s y o u r A r t i c l e18 extends y o u r A r t i c l e p a r e n t19 {20 // . . .21 }

oxArticle

myArticle

yourArticle

myArticle_p

yourArticle_p

Page 85: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 36 / 40

Example1 <?php23 c l a s s o xA r t i c l e4 {5 pub l i c f un c t i o n c a l c u l a t e P r i c e ( )6 {7 // . . .8 }9 }

1011 c l a s s myAr t i c l e12 extends myA r t i c l e p a r e n t13 {14 // . . .15 }1617 c l a s s y o u r A r t i c l e18 extends y o u r A r t i c l e p a r e n t19 {20 // . . .21 }

oxArticle

myArticle

yourArticle

myArticle_p

yourArticle_p

Page 86: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 87: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 88: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 89: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 90: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 91: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 92: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 37 / 40

Pro & Contra

I Benefits:I You can extend about everything. . .

I Drawbacks:I About everything will be extended. . .I You may not use the new operator – but use something like:

oxNew( "oxArticle" )I Violates object-oriented design principlesI Non-enforcable constraints (parent::method() )I Liskov substitution principle limits what you are allowed to do

Page 93: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 38 / 40

Outline

Motivation

Resources

Approaches

Real world

Summary

Page 94: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 39 / 40

Summary

I Patching

I Hooks

I Pipes & Filters

I Inheritance

I Subject-Observer

I Signal-Slot

Page 95: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 40 / 40

Thanks for listening

Please rate this talk athttp://joind.in/3249

Slides will be online (soon)http://talks.qafoo.com

Page 96: Modular Application Architecture · Modular Application Architecture DPC 2011 Kore Nordmann (@koredn) Tobias Schlitt (@tobySen) May 21, 2011. Modular Application Architecture2 / 40

Modular Application Architecture 40 / 40

Thanks for listening

Please rate this talk athttp://joind.in/3249

Stay in touch

I Kore Nordmann

I [email protected]

I @koredn / @qafoo

I Tobias Schlitt

I [email protected]

I @tobySen / @qafoo

Rent a PHP quality expert:http://qafoo.com