SlideShare a Scribd company logo
1 of 22
Wat zijn design principles
●   Beschrijven hoe de onderlinge delen van een
    programma zich tot elkaar moeten verhouden.

●   Gaan over het structureren van de code zelf, en
    niet het domein van het programma.

●   Abstract: zijn niet in code uit te drukken.
Als je de principes goed
            toepast...
Heeft je code de volgende eigenschappen:
●   Flexibel: De structuur laat verandering toe.

●   Robuust: Je kunt delen wijzigen zonder dat andere
    delen kapot gaan.

●   Herbruikbaar: Delen van het programma zijn in
    andere programma's toe te passen.
Als je de principes niet
         goed toepast..
Heeft je code de volgende eigenschappen:
●   Inflexibel: de structuur maakt veranderingen
    moeilijk.
●   Fragiel: kleine veranderingen hebben grote
    gevolgen.
●   Rigide: Alle delen zijn strek verweven.


Dit zijn eigenschappen van wat Bob Martin 'code smell'
noemt (komen we op terug).
Design patterns
●   Dienen als voorbeeld voor het toepassen van design
    principles.

●   Hoger niveau dan design principles: gaat over
    specifieke programmeer taal / paradigma (maar nog
    steeds niet over programma domein).

●   Concreet: is in code uit te drukken.
Code Smell
Wanneer de design principles niet (goed) worden
toegepast, ontwikkeld de code bepaalde
eigenschappen.

'Smelly' code wordt steeds moeilijker (duurder) om mee
te werken.

Als code smell 'te erg' wordt ontstaat er 'code rot': het
wordt té moeilijk veranderingen door te voeren.
Refactoring!
Rigiditeit
Moeilijk te veranderen.
Als het moeilijk is om (zelfs kleine) veranderingen in de
code door te voeren.
Fragiliteit
Makkelijk kapot te maken.
Wanneer een programma op meerdere, of onverwachte
plekken kapot gaat bij wijzigingen op een plek.
Immobiliteit
Hergebruik is moeilijk.
Wanneer het moeilijk is om code te ontwarren tot
functionele componenten.
Immobiliteit
Hergebruik is moeilijk.
Wanneer het moeilijk is om code te ontwarren tot
functionele componenten.
Stroperigheid
Wanneer het makkelijker is om het verkeerde te doen.
Wanneer a te moeilijk wordt aanpassingen te doen in
overeenstemming met het ontwerp. Wijzigingen worden
als 'hacks' geïmplementeerd.
Overdesign
Wanneer de complexiteit van de code groter is dan
de toepassing vraagt.
Het ontwerp bied of anticipeert op ongevraagde
functionaliteit, met als gevolg dat de structuur onnodig
complex is.
Design principles
    Een overzicht
Open/Close Principle
Code moet open zijn voor uitbreiding, maar gesloten
voor verandering.


Scheid code die niet moet veranderen van code die wel
mag veranderen (template pattern) of het gebruik van
abstracties (strategy pattern). Denk framework!


Uitgangspunt: het moet niet nodig zijn bestaande code
aan te passen om nieuwe functionaliteit toe te voegen.
Single responsibility
             principle
●   Een class moet slechts een verantwoordelijkheid (of
    rol) hebben.
●   Deze rol moet volledig worden geïmplementeerd door
    de class.
●   Als je een class aanpast die meerdere rollen heeft,
    splits die dan op.
Single responsibility
             principle
●   Functies moeten een ding doen. En een naam hebben
    die dit doel duidelijk omschrijft.
●   Functies die meerdere dingen doen moeten worden
    opgesplitst.
●   Functies met control flow moeten alleen de flow
    bevatten, de (optionele) acties worden aparte functies.
Maximum Cohesie
Cohesie is de mate waarin de onderdelen van een
module bij elkaar horen.
●   De delen van een module moeten sterk verwant zijn.
●   De delen van een module mogen niet sterk verwant
    zijn met delen van een andere module
Principle of least
            astonishment
"mensen zijn deel van het systeem. Het ontwerp zou op
de voorgaande ervaringen, verwachtingen en instelling
van de gebruiker moeten aansluiten."
Code moet zijn functie tot uitdrukking brengen:
●   Code moet doen wat je verwacht.
●   Code moet goed leesbaar zijn: korte blokken, goede
    naamgeving.
●   Het ontwerp moet de functie uitdrukken.
Principle of Least
             Knowledge
             Minimaliseer afhankelijkheid
Een object moet zo weinig mogelijk weten over de
structuur of velden van andere objecten.
Formeel gezien zou functie m van object o alleen
moeten praten met:
●   Andere functies van o.
●   m's parameters.
●   Objecten door m geïnstantieerd.
●   Direct aan o verwante objecten.
Principle of Least
             Knowledge
●   Maak de publieke interface van een module zo klein
    mogelijk, verberg de implementatie en de variabelen
    (state).
●   Dependency injection: Instantieer nooit modules in
    een module. Regel afhankelijkheden extern.
●   Laat een functie van module A nooit een instantie
    van module B terug geven. Korte lijnen.
●   Praat zo weinig mogelijk met andere modules.
Hollywood principle
                  (“Don't call us, we'll call you”)


                 Minimaliseer koppeling
●   Centraliseer de controle 'flow' binnen je programma.
●   Laat de controller de functionaliteit in je modules
    aanroepen (events).
●   De modules roepen de controller nooit aan. Gebruik
    callbacks.
●   De call richting gaat altijd één kant op.
The end.

More Related Content

Similar to Presentatie design principles

Joomla componenten bouwen met Component Creator
Joomla componenten bouwen met Component CreatorJoomla componenten bouwen met Component Creator
Joomla componenten bouwen met Component CreatorRené Kreijveld
 
Technische sessie: Intro to CQRS
Technische sessie: Intro to CQRSTechnische sessie: Intro to CQRS
Technische sessie: Intro to CQRSABC-GROEP.BE
 
Nlrs family guide doors 161220
Nlrs family guide doors 161220Nlrs family guide doors 161220
Nlrs family guide doors 161220Mark Maas
 
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...Technologieverkenning: click & play voor educatieve applicaties - Herman van ...
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...SURF Events
 
Niet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenNiet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenRick Beerendonk
 
Drupaljam Testing 20090626
Drupaljam Testing 20090626Drupaljam Testing 20090626
Drupaljam Testing 20090626Raymond Muilwijk
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...Adlib_gebruikersgroep
 
Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016Rick Spaan
 
Symfony CMF experiences
Symfony CMF experiencesSymfony CMF experiences
Symfony CMF experiencesmdekrijger
 
Andries Penning - Synchronization
Andries Penning - SynchronizationAndries Penning - Synchronization
Andries Penning - SynchronizationRelatics
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib_gebruikersgroep
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 ThemingHans Rossel
 
Eindwerk presentatie - Stage bij Duo nv
Eindwerk presentatie - Stage bij Duo nvEindwerk presentatie - Stage bij Duo nv
Eindwerk presentatie - Stage bij Duo nvvandenicky
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tim Ameye
 

Similar to Presentatie design principles (20)

ICT Architectuur Principes
ICT Architectuur PrincipesICT Architectuur Principes
ICT Architectuur Principes
 
Joomla componenten bouwen met Component Creator
Joomla componenten bouwen met Component CreatorJoomla componenten bouwen met Component Creator
Joomla componenten bouwen met Component Creator
 
Technische sessie: Intro to CQRS
Technische sessie: Intro to CQRSTechnische sessie: Intro to CQRS
Technische sessie: Intro to CQRS
 
Nlrs family guide doors 161220
Nlrs family guide doors 161220Nlrs family guide doors 161220
Nlrs family guide doors 161220
 
H5 Ontwerpfase
H5 OntwerpfaseH5 Ontwerpfase
H5 Ontwerpfase
 
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...Technologieverkenning: click & play voor educatieve applicaties - Herman van ...
Technologieverkenning: click & play voor educatieve applicaties - Herman van ...
 
Niet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappenNiet onderhoudbare software in 10 makkelijke stappen
Niet onderhoudbare software in 10 makkelijke stappen
 
Drupaljam Testing 20090626
Drupaljam Testing 20090626Drupaljam Testing 20090626
Drupaljam Testing 20090626
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2019 - Wouter de Voogd - Datamig...
 
Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016Joomla backend-beheer vereenvoudigen - Joomladagen 2016
Joomla backend-beheer vereenvoudigen - Joomladagen 2016
 
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HANHAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
HAN Lean-QRM symposium 11 juni. Danielle Hendriks, HAN
 
Monitoring sucks
Monitoring sucksMonitoring sucks
Monitoring sucks
 
Symfony CMF experiences
Symfony CMF experiencesSymfony CMF experiences
Symfony CMF experiences
 
Andries Penning - Synchronization
Andries Penning - SynchronizationAndries Penning - Synchronization
Andries Penning - Synchronization
 
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
Adlib gebruikersgroep - voorjaarsbijeenkomst 2014 - Rolf Blijleven - Do's en ...
 
Drupal 7 Theming
Drupal 7 ThemingDrupal 7 Theming
Drupal 7 Theming
 
Eindwerk presentatie - Stage bij Duo nv
Eindwerk presentatie - Stage bij Duo nvEindwerk presentatie - Stage bij Duo nv
Eindwerk presentatie - Stage bij Duo nv
 
Ds intro
Ds introDs intro
Ds intro
 
Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012Tussentijdse presentatie 22/11/2012
Tussentijdse presentatie 22/11/2012
 
Mdot 4a broker introductie
Mdot 4a broker introductie Mdot 4a broker introductie
Mdot 4a broker introductie
 

Presentatie design principles

  • 1. Wat zijn design principles ● Beschrijven hoe de onderlinge delen van een programma zich tot elkaar moeten verhouden. ● Gaan over het structureren van de code zelf, en niet het domein van het programma. ● Abstract: zijn niet in code uit te drukken.
  • 2. Als je de principes goed toepast... Heeft je code de volgende eigenschappen: ● Flexibel: De structuur laat verandering toe. ● Robuust: Je kunt delen wijzigen zonder dat andere delen kapot gaan. ● Herbruikbaar: Delen van het programma zijn in andere programma's toe te passen.
  • 3. Als je de principes niet goed toepast.. Heeft je code de volgende eigenschappen: ● Inflexibel: de structuur maakt veranderingen moeilijk. ● Fragiel: kleine veranderingen hebben grote gevolgen. ● Rigide: Alle delen zijn strek verweven. Dit zijn eigenschappen van wat Bob Martin 'code smell' noemt (komen we op terug).
  • 4. Design patterns ● Dienen als voorbeeld voor het toepassen van design principles. ● Hoger niveau dan design principles: gaat over specifieke programmeer taal / paradigma (maar nog steeds niet over programma domein). ● Concreet: is in code uit te drukken.
  • 6. Wanneer de design principles niet (goed) worden toegepast, ontwikkeld de code bepaalde eigenschappen. 'Smelly' code wordt steeds moeilijker (duurder) om mee te werken. Als code smell 'te erg' wordt ontstaat er 'code rot': het wordt té moeilijk veranderingen door te voeren. Refactoring!
  • 7. Rigiditeit Moeilijk te veranderen. Als het moeilijk is om (zelfs kleine) veranderingen in de code door te voeren.
  • 8. Fragiliteit Makkelijk kapot te maken. Wanneer een programma op meerdere, of onverwachte plekken kapot gaat bij wijzigingen op een plek.
  • 9. Immobiliteit Hergebruik is moeilijk. Wanneer het moeilijk is om code te ontwarren tot functionele componenten.
  • 10. Immobiliteit Hergebruik is moeilijk. Wanneer het moeilijk is om code te ontwarren tot functionele componenten.
  • 11. Stroperigheid Wanneer het makkelijker is om het verkeerde te doen. Wanneer a te moeilijk wordt aanpassingen te doen in overeenstemming met het ontwerp. Wijzigingen worden als 'hacks' geïmplementeerd.
  • 12. Overdesign Wanneer de complexiteit van de code groter is dan de toepassing vraagt. Het ontwerp bied of anticipeert op ongevraagde functionaliteit, met als gevolg dat de structuur onnodig complex is.
  • 13. Design principles Een overzicht
  • 14. Open/Close Principle Code moet open zijn voor uitbreiding, maar gesloten voor verandering. Scheid code die niet moet veranderen van code die wel mag veranderen (template pattern) of het gebruik van abstracties (strategy pattern). Denk framework! Uitgangspunt: het moet niet nodig zijn bestaande code aan te passen om nieuwe functionaliteit toe te voegen.
  • 15. Single responsibility principle ● Een class moet slechts een verantwoordelijkheid (of rol) hebben. ● Deze rol moet volledig worden geïmplementeerd door de class. ● Als je een class aanpast die meerdere rollen heeft, splits die dan op.
  • 16. Single responsibility principle ● Functies moeten een ding doen. En een naam hebben die dit doel duidelijk omschrijft. ● Functies die meerdere dingen doen moeten worden opgesplitst. ● Functies met control flow moeten alleen de flow bevatten, de (optionele) acties worden aparte functies.
  • 17. Maximum Cohesie Cohesie is de mate waarin de onderdelen van een module bij elkaar horen. ● De delen van een module moeten sterk verwant zijn. ● De delen van een module mogen niet sterk verwant zijn met delen van een andere module
  • 18. Principle of least astonishment "mensen zijn deel van het systeem. Het ontwerp zou op de voorgaande ervaringen, verwachtingen en instelling van de gebruiker moeten aansluiten." Code moet zijn functie tot uitdrukking brengen: ● Code moet doen wat je verwacht. ● Code moet goed leesbaar zijn: korte blokken, goede naamgeving. ● Het ontwerp moet de functie uitdrukken.
  • 19. Principle of Least Knowledge Minimaliseer afhankelijkheid Een object moet zo weinig mogelijk weten over de structuur of velden van andere objecten. Formeel gezien zou functie m van object o alleen moeten praten met: ● Andere functies van o. ● m's parameters. ● Objecten door m geïnstantieerd. ● Direct aan o verwante objecten.
  • 20. Principle of Least Knowledge ● Maak de publieke interface van een module zo klein mogelijk, verberg de implementatie en de variabelen (state). ● Dependency injection: Instantieer nooit modules in een module. Regel afhankelijkheden extern. ● Laat een functie van module A nooit een instantie van module B terug geven. Korte lijnen. ● Praat zo weinig mogelijk met andere modules.
  • 21. Hollywood principle (“Don't call us, we'll call you”) Minimaliseer koppeling ● Centraliseer de controle 'flow' binnen je programma. ● Laat de controller de functionaliteit in je modules aanroepen (events). ● De modules roepen de controller nooit aan. Gebruik callbacks. ● De call richting gaat altijd één kant op.