[oop] mapper

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Medior/senior Back-end developer gezocht!

Functie Vanwege de groei binnen het bedrijf zijn we op zoek naar versterking in het devlopmenttean. Als back-end developer bouw je aan de bedrijfssoftware die ons helpt bij de primaire processen. Een leuk (intern) project dus waarbij je de software continu doorontwikkeld! Je werkt in een klein team, we hebben dagelijks stand-ups en iedere twee weken een scrum-sessie, begeleid door onze Scrum Master. Hierin krijg je uitgebreid de kans om je ideeën te presenteren, en te overleggen met je mede-ontwikkelaars en de Product Owner. Binnen de ontwikkelteams gebruiken we Trello, Gitlab, Jiira, Confluence en Boockstack. Hiernaast werken ze met de

Bekijk vacature »

Functioneel applicatiebeheerder - SOP-SYS-SAM

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Functioneel Applicatiebeheerder op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je gaat samenwerken in een team van circa 15 functioneel applicatiebeheerders en gaat onderdeel uitmaken van een DevOps team. Met dit team ga je applicaties (laten) ontwikkelen en beheren. Hierbij concentreer je je vooral op de functionele aspecten, zodat

Bekijk vacature »

Software developer - C Sharp

Functie omschrijving Voor een opdrachtgever, met een prachtig kantoor in omgeving Wateringen zijn wij op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind jij het leuk om in een Agile/Scrum omgeving te werken? Wil jij

Bekijk vacature »

Back end developer Python, PHP

Functie Jij als full stack ontwikkelaar zult komen te werken samen met 1 PHP ontwikkelaar een PO en een flexibele schil aan ontwikkelaars . Samen ga je ervoor zorgen dat de huidige producten doorontwikkeld worden. De marketplace is geschreven in PHP Laravel en in de front end React. De roostersoftware is ontwikkeld in Python in combinatie met React in de front end. Jij zult voornamelijk (lees 75%) werken aan de roostersoftware. Momenteel ligt de uitdaging in het feit dat de roostersoftware breder schaalbaar moet worden zodat het voor meerdere flexwerkers ingezet kan worden. Verder willen ze financiële koppelingen gaan maken

Bekijk vacature »

Junior Software Developer

Functie omschrijving Wij zijn op zoek naar een Junior Software Developer .NET, C# voor een gaaf bedrijf in de omgeving van Utrecht! Sta jij aan het begin van je carrière en heb je net je HBO of WO-diploma in de richting van ICT of Techniek mogen ontvangen? En heb jij grote affiniteit met software development? Lees dan snel verder! Voor een opdrachtgever in de omgeving van Utrecht, zijn wij op zoek naar een Junior Software Developer. Werk jij graag aan verschillende projecten en ga je graag klanten op bezoek? Dan is dit de ideale functie voor jou! Binnen deze functie

Bekijk vacature »

Developer

Functie omschrijving Gaat jouw hart sneller kloppen van software developen in C#.NET? Voor een softwarebedrijf in regio Den Bosch zijn wij op zoek naar een C# programmeur. Lees snel verder! Wat ga je doen? Je gaat werken met C# en ASP.NET MVC Framework om onder meer webapplicaties, webshops en websites te ontwikkelen. Je optimaliseert de bestaande software en helpt mee aan het automatiseren van bedrijfsprocessen. Je gaat samen met je collega's de juiste oplossing op basis van de wensen van de klanten uitwerken tot een mooi product. Bedrijfsprofiel Het ontwikkelen van softwareoplossingen en kantoorautomatiseringen is waar dit bedrijf voor staat.

Bekijk vacature »

Junior Front-End Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale oplossingen van Coolblue. Wat doe je als Junior Front-End Developer bij Coolblue? Als Junior Front-End Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen. Op dat moment komt je wil om te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te maken. Je sterk analytisch vermogen komt dan goed van pas! Ook Junior Front-End Developer worden bij Coolblue?

Bekijk vacature »

Back-end programmeur

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een nieuwe uitdaging? Voor een uitdagende werkgever in omgeving Waalwijk zijn wij op zoek naar een enthousiaste softwareontwikkelaar met kennis of ervaring met C# en SQL. In een uitdagende rol als C#.NET Developer werk je samen met een enthousiast en informeel team aan het bouwen van maatwerk software voor variërende klanten. Verder ziet jouw takenpakket er als volgt uit: Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je houdt je bezig met het ontwikkelen

Bekijk vacature »

Java developer

Als Java Developer bij Sogeti ben je onderdeel van onze toonaangevende community die bestaat uit ruim 100 gepassioneerde Java professionals. In teamverband lever je mooie prestaties. Daarmee draag je aan bij de meerwaarde die wij leveren aan onze top-opdrachtgevers. Geen werkdag is hetzelfde! Je bent voortdurend bezig met het oplossen van allerlei complexe vraagstukken binnen bedrijfs kritische systemen voor onze klanten in regio Noordoost zoals DUO, ING, CJIB en Tendernet. Natuurlijk krijg jij de mogelijkheid je verder te certificeren in dit vakgebied. We organiseren regelmatig technische Meetups en doen veel aan kennisdeling. Sogetisten hebben plezier in hun werk en staan

Bekijk vacature »

SQL developer

Functieomschrijving Voor een erkende werkgever in de omgeving van Tilburg zijn wij op zoek naar een ervaren SQL ontwikkelaar. Hier wordt jij mede verantwoordelijk voor zowel de design en implementatie van SQL-databases als voor het verstaan van de processen van klanten naar het vertalen van deze processen naar IT-oplossingen. Jouw takenpakket komt er als volgt uit te zien: Het ontwerpen en implementeren van databaseschema's: Je bent in staat om een database te ontwerpen en de structuur van tabellen, relaties, indexen en andere objecten te definiëren; Het schrijven van complexe SQL-query's: Je kunt complexe query's schrijven om gegevens uit de database

Bekijk vacature »

C# .NET Developer

Dit ga je doen Als developer nieuwe gave features implementeren; Werken met technieken als C# .NET en (REST) API's webservices; Ontwikkelen van koppelingen middels API's; Maken van technische keuzes en beslissingen over de architectuur; Junior collega's coachen; Initiatief nemen voor nieuwe technische mogelijkheden; Je bent een belangrijke schakel - en vindt het leuk - om te schakelen met de business. Hier ga je werken In een klein team van professionals ben je als C# .NET Developer verantwoordelijk voor het ontwikkelen van één van de applicaties voor het grootste inhouse product: een applicatie voor alles omtrent hypotheken. De programmeertaal die je

Bekijk vacature »

Medior C# Developer

Samen met het development team zorg je ervoor dat alle systemen achter de schermen vlekkeloos werken. Wat doe je als Medior C# Developer bij Coolblue? Als C# developer doe je regelmatig mee aan brainstormsessies over user experience, data en task flow met de UX Designer, Product Owner en Data Scientist in je team. Daarnaast schrijf je op zichzelf staande, consistente en testbare code die goed onderhoudbaar en toekomstbestendig is. Ook C# Developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Werken met verschillende soorten data-opslag, zoals Oracle of AWS. Problemen oplossen

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

Bekijk vacature »

Front-end React developer

Functie Het frontend team bestaat momenteel uit 4 dedicated front-enders en is hard aan het groeien! Ook werken er diverse designers waar je veel mee schakelt. Samen leveren jullie een essentiële bijdrage aan de applicaties die ze voor hun klanten realiseren, jij bent hierin de schakel tussen de eindgebruiker en de slimme backend. Je werkt in het frontend team samen met de backend teams en product owners om te zorgen dat onze applicaties een fijne gebruikerservaring opleveren. Ze werken o.a. met: React, Atomic design, Styled components, JavaScript / TypeScript, NPM, Webpack Blade templates, HTML, SCSS, Git flow. Eisen • HBO

Bekijk vacature »
Ozzie PHP

Ozzie PHP

05/05/2013 02:11:25
Quote Anchor link
Ola,

Kan iemand me uitleggen waartoe een mapper dient? Mijn gedachte (maar ik weet dus niet of dit 100% klopt) is dat een mapper een tussenlaag is tussen een class en een opslagmedium (meestal een database). In plaats van dat je in een class een "save" method hebt die rechtstreeks de database aanspreekt en een query uitvoert, spreek je de mapper aan. Klopt dit?

In een ander topic kwam toevallig dit stukje code voorbij:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$userMapper
= new UserMapper();
$user = $userMapper->getById(new User(12));
?>

Hier zie ik dus dat er een UserMapper wordt aangemaakt en dat er via die UserMapper een User object wordt teruggegeven.

Zou het niet handiger zijn om gewoon een nieuwe User aan te maken, en dat de User class intern een UserMapper gebruikt om de juiste databasegegevens te laden? Of kan dat niet?

En als je dan een User wil opslaan, moet je dat dan ook weer via die UserMapper doen?

Kortom, mijn vraag is eigenlijk hoe zo'n mapper werkt. Misschien kan iemand een heel simpel voorbeeldje geven van hoe je met een mapper een User moet laden en opslaan?
 
PHP hulp

PHP hulp

29/04/2024 11:35:51
 

05/05/2013 15:32:54
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php

/**
 * Valideren van velden is weg gelaten!
 */

class User {

    private $id;
    private $username;

    /**
     * Alleen de id opslaan als dit ook een echte id is, want de mapper zal
     * dit aanroepen en dan zal de id niet correct opgeslagen worden.
     */

    public function __construct($id = 0) {
        (int)
$id != 0 ? $this->setId($id) : false;
    }


    public function setId($id) {
        $this->id = $id;
    }


    public function setUsername($username) {
        $this->username = $username;
    }


    public function getId() {
        return $this->id;
    }


    public function getUsername() {
        return $this->username;
    }

}


class UserMapper extends DataMapper {

    /**
     * @param object $user
     */

    public function getById(User $user) {
        $sth = $this->pdo->prepare('SELECT {velden} FROM users WHERE id = :id');
        $sth->execute(array(':id' => $user->getId());
        return $sth->fetchObject('User');
    }


    /**
     * @param object $user
     */

    public function save(User $user) {
        $sth = $this->pdo->prepare('UPDATE users SET username = :username WHERE id = :id');
        return $sth->execute(array(':id' => $user->getId(), ':username' => $user->getUsername()));
    }

}


/**
 * De user mapper openen.
 */

$userMapper = new UserMapper();

/**
 * De gebruiker met id 12 laden.
 */

print_r($userMapper->getById(new User(12));

/**
 * De gebruiker credentials toevoegen.
 */

$user = new User(12);
$user->setUsername('Aaron');

$userMapper->save($user);

?>

Het idee erond is dat een User object gebruikt wordt voor het vasthouden van de velden en de mapper dan weer de velden gaat afhandelen in de database.

Zo hebben de verschillende classes maar één taak.

Het is ook gemakkelijker als je de mappers moet updaten om de een of de andere reden.
Gewijzigd op 05/05/2013 15:36:05 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 15:40:14
Quote Anchor link
Dankjewel voor je reactie Aaron.

Ik snap alleen nog niet helemaal hoe het werkt. Want als ik een user wil ophalen dan doe ik dit??

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$userMapper
= new UserMapper();
$user = $userMapper->getById(new User(12));
?>

Ik geef dan het User object mee aan de mapper? Correct? Alleen in jouw voorbeeld wordt de ID niet via de constructor geset. Of mis ik iets?

En wat gebeurt hier precies?

return $sth->fetchObject('User');

En hoe komt de data uit de database dan weer in die User class terecht?

Ik hoop dat je het nog een beetje kan toelichten!
 

05/05/2013 15:46:36
Quote Anchor link
Als je een gebruiker wilt ophalen moet je de mapper weer openen. Eventueel kun je een factory() functie maken... Om iets uit de database te halen geef je inderdaad een User object mee! Zo kan er niets van foute code tussen glippen als je alles uiteraard valideert.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php

function getUsername() {
    return preg_replace('![^a-zA-Z]!', '', $this->username);
}


?>

Met fetch object laat je het resultaat dus fetchen in een object. Wat heel gemakkelijk is omdat je dan weeral niets fout kan doen (zie getUsername()). Als je meerdere resultaten hebt gebruik je dan fetchAll(PDO::FETCH_CLASS, 'User').

fetchObject en fetchAll hebben toegang tot de private values dacht ik. Dit wordt tevens afgehandeld door PDO. In andere gevallen zou je gewoon een array terug geven.

Construct is nu toegevoegd.
 
Ozzie PHP

Ozzie PHP

05/05/2013 15:57:23
Quote Anchor link
Pfff, lastig. Ik dacht eigenlijk dat fetchObject alleen een stdObject kon teruggeven.

Zou je als laatste nog kunnen uitleggen hoe dat fetchObject werkt. Als ik hier kijk http://php.net/manual/en/pdostatement.fetchobject.php dan lijkt het alsof je nog een array met argumenten moet toevoegen, die vervolgens in de constructor wordt geinjecteerd.

En waarom geef je in de mapper het User object mee, terwijl je via fetchObject weer een User obejct teruggeeft?

Sorry voor de vele vragen, maar het is me (zoals je merkt) nog niet helemaal duidelijk wat er nou precies gebeurt.
 

05/05/2013 16:12:54
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php

/**
 * mixed PDOStatement::fetchObject ([ string $class_name = "stdClass" [, array $ctor_args ]] )
 */

$user = $sth->fetchObject('User');

/**
 * Dan zul je gewoon het volgende kunnen doen als er natuurlijk een
 * gebruiker is.
 *
 * De argumenten die je aan fetchObject kun meegeven heb ik nog nooit gebruikt. Maar
 * je moet er wel voor zorgen als je een constructor gebruikt dat je ervoor zorgt dat je
 * geen argument toelaat die niet valid zijn omdat anders fetchObject de constructor aanroept en
 * zo bijvoorbeeld id 'Aaron' wordt.
 */

echo $user->getUsername();

?>

Waarom ik aan de mapper een object mee geef.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php

/**
 * $_GET['id'] = 'Een String?';
 *
 * Laten we veronderstellen dat $_GET['id'] bestaat. Hier
 * zullen we $_GET['id'] dus nog moeten valideren. Daarom dat ik dus
 * user gebruik.
 */

$userMapper = new UserMapper();
$user = $userMapper->getById($_GET['id']);

/**
 * Laten we nu maar eens User gebruiken. Hier hoef je
 * niet te doen omdat $user->getId() ervoor zou moeten zorgen
 * dat je een id terug krijg of toch minstens een nummer (al dan niet correct).
 *
 * Ook naar de insert en save toe is het gewoon veel veiliger omdat alle input
 * dan gevalideerd is...
 *
 * De validatie is weg gelaten.
 */

$userMapper = new UserMapper();
$user = $userMapper->getById(new User($_GET['id']));

/**
 * In het eerste geval zal de query dan de volgende zijn.
 * SELECT {velden} FROM users WHERE id = 'Een String?'
 */

/**
 * In het tweede geval.
 * SELECT {velden} FROM users WHERE id = '0' of SELECT {velden} FROM users WHERE id = ''
 *
 * Die of is gewoon te zien hoe je de input valideert. Ik gebruik voor een int typecasting en dan
 * als het 0 is niets returnen.
 */


?>

En waarom ik een object terug geef is net dezelfde reden zoals hierboven. Dan wordt alle input nogmaals gecontroleerd, want neem nu aan dat er toch iets verkeerd in de database is opgeslagen... zal het nog altijd min of meer correct op het scherm komen (toch niet dat het gevaarlijk is voor de klant).
Gewijzigd op 05/05/2013 16:17:41 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 16:25:36
Quote Anchor link
Ah, dus als ik het goed begrijp geef je een User object mee aan de Usermapper om te controleren of de ID wel een getal is. Maar dat betekent dus dat je eigenlijk voor niks een object aanmaakt.

Je zou ook gewoon een errormelding kunnen geven als $_GET['id'] geen getal is? Ik vind het vreemd dat je dan een User object meegeeft alleen om een getalletje te controleren.

Anyhow... dat fetchObject snap ik nog steeds niet. Jij doet dit:
$user = $sth->fetchObject('User');

Maar hoe komen de gegevens dan in het object terecht?
 

05/05/2013 16:32:37
Quote Anchor link
Ja. Dat zou je inderdaad kunnen doen en dat doe ik ook. Maar daarvoor maak ik een user object aan tijdens een POST request. Dan controleer ik of het een getal is (met eventuele errors) en dan heb ik toch al een user object... dus waarom niet gewoon aan de mapper doorgeven? In sommige gevalen selecteer je ook op meer dan één getal, dan kan het wel degelijk nuttig zijn.

Hoe de gegevens er terug komen weet ik niet want dit wordt door PDO geregeld (anders zou je ook nooit aan private values kunnen en dat kan hier wel). Alleen moeten de kolom namen gelijk zijn aan die in het object. Dus als je een kolom id hebt, moet je ook ergens $this->id hebben.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php

/**
 * In de veronderstelling dat alle POST en GET values bestaan!
 */

$user = new User($_GET['id']);
$userMapper = new UserMapper();

if($userMapper->getById($user) == false) {
    # Afhandelen
}

/**
 * Form submit.
 */

if($_SERVER['REQUEST_METHOD'] === 'POST') {

    $user->setUsername($_POST['username']);

    # Hier tussen nog alles valideren :-) Met een try catch block.

    $userMapper->save($user);

}


/**
 * Formulier tonen dat ook $user->get() gebruikt.
 */


?>

Zoals je kunt zien heb je dan toch al een object met alle veilige values!
Gewijzigd op 05/05/2013 16:34:07 door
 
Ozzie PHP

Ozzie PHP

05/05/2013 16:36:28
Quote Anchor link
Oké Aaron, thanks voor je uitleg!

Mochten er anderen zijn die ook gebruik maken van mappers, dan ben ik benieuwd naar hoe zij dat doen.

Alle reacties zijn van harte welkom!
 
Wouter J

Wouter J

05/05/2013 19:55:27
Quote Anchor link
Hmm... http://www.phphulp.nl/php/forum/topic/databse-in-een-class-hoe/82977/ (wat zou het toch makkelijk zijn als je al je eigen topics kan terugvinden...)
 
Tim S

Tim S

05/05/2013 20:14:12
Quote Anchor link
Ik heb het ook zonder mappers geprobeerd, maar vindt met mapper toch het prettigst werken.

Ik gebruik alleen geen fetchObject, wat ik wel eens doe is mappers in mappers gebruiken:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php

class menuMapper{

    public function fetchById($id){

        $smtp = $this->db->prepare('SELECT title, id FROM menus WHERE id=:id');
        $smtp->execute(array(
 
         ':id' => $id
 
        ));

         $result = $smtp->fetch(\PDO::FETCH_ASSOC);

        $menu = new \Menu;
         $menu->setId();
         $menu->setTitle();
 
         $itemMapper = new \menuItemMapper;
         $items = $itemMapper->fetchByMenuId($result['id']);
 
         $item = new \menuItem;
         foreach($items as $item){

             $item->setId();
              $item->setTitle();

              $menu->addItem(serialize($item));

         }
 

    }

}



$menuMapper = new menuMapper;
$menu = $menuMapper->fetchById(1);
print_r($menu->getItemsInArray());
?>
Gewijzigd op 05/05/2013 20:15:04 door Tim S
 
Ozzie PHP

Ozzie PHP

05/05/2013 21:15:43
Quote Anchor link
Thanks heren!

Wouter... dat zou inderdaad bijzonder makkelijk zijn. Hoe heb jij dat topic gevonden?
Op de een of andere manier kan ik regelmatig mijn topics niet meer terugvinden.
 
Wouter J

Wouter J

05/05/2013 21:19:41
Quote Anchor link
Ik zoek altijd via google en de volgende zoekopdracht: site:phphulp.nl %steekwoord% %username% Bij %username% vul ik dan altijd de naam in van de gene wie het geschreven heeft wat ik zoek. In dit geval was het: site:phphulp.nl datamapper usermapper pim wouter j
 
Ozzie PHP

Ozzie PHP

05/05/2013 21:46:03
Quote Anchor link
Ah oke... ik zoek me altijd rot en kan dan vaak niks meer terugvinden. En dan ga ik zelfs twijfelen of ik er uberhaupt al wel eens een vraag over heb gesteld. Jammer dat je via het forum zelf niet makkelijk iets kunt terugvinden.
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.