“EXTRAS”
CONCURRENCY PATTERNS,
ARCHITECTURAL PATTERNS,
MANY MORE…
Slide 15
Slide 15 text
“GANG OF FOUR”
FOR AVERAGE BEGINNER PHP DEVELOPER
(ME, NOT LONG WHILE AGO)
Slide 16
Slide 16 text
FACTORY METHOD,
SINGLETON,
OBSERVER,
ITERATOR.
Slide 17
Slide 17 text
POPULAR IN PHP
DEPENDENCY INJECTION (STRUCTURAL),
FRONT CONTROLLER (ARCHITECTURAL),
MODEL VIEW CONTROLLER (ARCHITECTURAL),
FACTORY (CREATIONAL),
SINGLETON (CREATIONAL),
OBSERVER (BEHAVIOURAL).
Slide 18
Slide 18 text
REVIEW OF PATTERNS
IN PHP SOFTWARE.
BRIEF, OPINIONATED, NOT PRECISE.
Slide 19
Slide 19 text
WHAT’S HOT?
MODEL VIEW CONTROLLER,
FRONT CONTROLLER,
FACTORY METHOD,
OBSERVER,
REGISTRY,
DECORATOR,
VISITOR,
…
Slide 20
Slide 20 text
MVC
ARCHITECTURAL PATTERN.
THREE TIER ARCHITECTURE TO RELATE USER
INTERFACE TO UNDERLYING DATA MODELS.
Slide 21
Slide 21 text
TYPICAL MVC DIAGRAM
Slide 22
Slide 22 text
MODEL
DATA AND BUSINESS LOGIC.
Slide 23
Slide 23 text
VIEW
INTERFACE TO VIEW AND MODIFY DATA
Slide 24
Slide 24 text
CONTROLLER
THIN MID LAYER BETWEEN MODEL AND VIEW:
1. ACCEPTS INPUT
2. EXECUTES COMMANDS ON MODEL
3. GENERATES OUTPUT
FRONT CONTROLLER
ARCHITECTURAL PATTERN.
PROVIDES CENTRALISED ENTRY POINT FOR
HANDLING REQUESTS.
SPECIALISED CASE OF MEDIATOR PATTERN.
Slide 28
Slide 28 text
MEDIATOR PATTERN
BEHAVIOURAL PATTERN.
DEFINES AN OBJECT, WHICH DECIDES HOW A SET
OF OBJECTS INTERACTS.
Slide 29
Slide 29 text
TYPICAL MEDIATOR DIAGRAM
Slide 30
Slide 30 text
MEDIATOR
DEFINES AN INTERFACE FOR COMMUNICATING
WITH COLLEAGUE OBJECTS.
Slide 31
Slide 31 text
CONCRETE MEDIATOR
IMPLEMENT COOPERATIVE BEHAVIOUR;
KNOWS AND MAINTAINS IT’S COLLEAGUES.
Slide 32
Slide 32 text
C0LLEAGUE
KNOWS IT’S MEDIATOR;
COMMUNICATES WITH MEDIATOR INSTEAD OF
OTHER COLLEAGUES.
Slide 33
Slide 33 text
IMPLEMENTATION IN OXID
Slide 34
Slide 34 text
SINGLETON
CREATIONAL (ANTI)PATTERN.
ENSURES A CLASS HAS ONLY ONE INSTANCE.
PROVIDES A GLOBAL POINT OF ACCESS TO IT.
AVOID AT ANY COST!
Slide 35
Slide 35 text
WHERE IT’S USED?
MAGENTO,
SILVERSTRIPE,
PRESTASHOP,
OXID.
Slide 36
Slide 36 text
WHY IT’S SO BAD?
GLOBAL INSTANCE - HIDING DEPENDENCIES;
USUALLY LEADS TO TIGHT COUPLING;
USUALLY CARRIES AROUND GLOBAL STATE;
STATIC CALL - HARD TO MOCK.
Slide 37
Slide 37 text
ALTERNATIVES?
USE A FACTORY INSTEAD;
INSTANTIATE AT THE TOP OF APP PASS TO
COMPONENTS VIA DEPENDENCY INJECTION.
Slide 38
Slide 38 text
REGISTRY
STRUCTURAL PATTERN (NOT GOF).
A CONTAINER OF SHARED OBJECTS.
Slide 39
Slide 39 text
DANGEROUS?
OFTEN USED WITH STATIC CALLS.
WHEN ABUSED LEADS TO HIDDEN
DEPENDENCIES.
Slide 40
Slide 40 text
EXAMPLE FROM OPENCART
Slide 41
Slide 41 text
EXAMPLE FROM SYLIUS
Slide 42
Slide 42 text
HOW TO IMPROVE?
BEING DISCIPLINED ABOUT WHAT TO STORE IN
REGISTRY,
NOT USING STATIC CALLS.
Slide 43
Slide 43 text
DECORATOR
STRUCTURAL PATTERN.
ATTACH ADDITIONAL RESPONSIBILITIES TO AN
OBJECT DYNAMICALLY.
Slide 44
Slide 44 text
TYPICAL DECORATOR DIAGRAM
Slide 45
Slide 45 text
COMPONENT
DEFINES AN INTERFACE FOR OBJECT THAT CAN
HAVE RESPONSIBILITIES ADDED TO THEM
DYNAMICALLY.
Slide 46
Slide 46 text
CONCRETE COMPONENT
DEFINES AN OBJECT TO WHICH ADDITIONAL
RESPONSIBILITIES CAN BE ATTACHED.
Slide 47
Slide 47 text
DECORATOR
MAINTAINS A REFERENCE TO A COMPONENT
OBJECT;
DEFINES AN INTERFACE THAT CONFORMS TO
COMPONENT’S INTERFACE.
Slide 48
Slide 48 text
CONCRETE DECORATOR
ADDS RESPONSIBILITIES TO THE COMPONENT.
Slide 49
Slide 49 text
EXAMPLE FROM SILVERSTRIPE
Slide 50
Slide 50 text
ALTERNATIVE?
STRATEGY DESIGN PATTERN
Slide 51
Slide 51 text
STRATEGY
BEHAVIOURAL PATTERN.
DEFINES A FAMILY OF ALGORITHMS AND MAKE
THEM INTERCHANGEABLE.
Slide 52
Slide 52 text
TYPICAL STRATEGY DIAGRAM
Slide 53
Slide 53 text
STRATEGY
DECLARES AN INTERFACE COMMON TO ALL
SUPPORTED ALGORITHMS;
IS USED BY CONTEXT TO CALL ALGORITHM.
Slide 54
Slide 54 text
CONCRETE STRATEGY
IMPLEMENTS THE ALGORITHM USING STRATEGY
INTERFACE.
Slide 55
Slide 55 text
CONTEXT
IS CONFIGURED WITH A CONCRETE STRATEGY
OBJECT;
MAINTAINS A REFERENCE TO A STRATEGY
OBJECT;
DEFINES INTERFACE FOR STRATEGY TO ACCESS
ITS DATA (OPTIONAL).
Slide 56
Slide 56 text
DIFFERENCES
FROM DECORATOR
SWITCHES ENTIRE ALGORITHM RATHER THAN
WRAPS IT UP.
Slide 57
Slide 57 text
COMMON
ANTIPATTERNS
STATIC CALLS,
EXCESSIVE USE OF GLOBAL CONSTANTS,
EXCESSIVE USE OF MAGIC,
SINGLETONS,
GOD CLASSES.
Slide 58
Slide 58 text
WHAT’S MY POINT?
Slide 59
Slide 59 text
DESIGN PATTERNS ARE
NOT THAT WIDE SPREAD.
MANY FRAMEWORKS MAKE USE OF LIMITED
SUBSET OF THEM. THERE ARE ALSO N WAYS TO
IMPLEMENT DESIGN PATTERN.
Slide 60
Slide 60 text
THERE IS ALTERNATIVE
TO EVERYTHING.
BE AWARE OF YOUR OPTIONS AND KNOW WHERE
TO LOOK IT UP WHEN NEEDED.
Slide 61
Slide 61 text
KNOWING ANTIPATTERNS
IS IMPORTANT
TO RAISE AWARENESS AND NOT TO FALL INTO
THE SAME TRAP AS PROCEEDERS DID.
Slide 62
Slide 62 text
INSTEAD OF QUESTIONS:
GO AND DISCUSS
WITHIN YOUR TEAM.