[oop] valid state

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

Bekijk vacature »

SAP HANA Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Veldhoven Vacature ID: 13382 Introductie We is looking for a HANA Developer to work for our client. The candidate has to have an experience in building Data Intensive Applications (DIA’s). The role of a HANA Developer at ASML involves working on building Data Intensive Applications in an industrial/enterprise environment. The primary responsibility is to handle data from various sources and determine the best way to structure it for use by data analysts, who will run queries and algorithms against it for predictive and prescriptive analytics through machine learning. Wat verwachten we van jou?

Bekijk vacature »

Medior PHP Developer

Functie omschrijving We are looking for a dutch native speaker Wil jij als developer werken bij een interne organisatie en de eigen software verder helpen ontwikkelen? Lees dan snel verder! In deze functie ga je werken als PHP Developer en de interne software en applicaties verder ontwikkelen. In het kort houdt dit in: Je gaat de interne applicaties en software verder optimaliseren. Verder bouw je verschillende API's en koppelingen tussen systemen. Je gaat het CRM-systeem door middel van PHP verder ontwikkelen. Ook ga je collega's ondersteunen bij vragen over de software en applicaties. Bedrijfsprofiel Dit bedrijf is actief in het

Bekijk vacature »

PHP Developer

As a PHP Developer at Coolblue, you ensure that our webshops work as optimal as possible. How do I become a PHP Developer at Coolblue? As a PHP Developer you work together with other development teams to make our webshop work as optimal as possible and to make our customers happy. Although you are a PHP Developer, you are not averse to a little TypeScript or other technologies that might be used. Would you also like to become a PHP Developer at Coolblue? Read below if the job suits you. You enjoy doing this Writing vanilla PHP code. Working with

Bekijk vacature »

Back end developer Digital agency

Functie Heb jij altijd al eens bij een bedrijf willen werken waar jij géén nummertje bent, die alleen maar uitvoerend werk doet? Dan zou je hier perfect passen! Tuurlijk, je werkt aan projecten voor grote of kleine bedrijven… Het enige verschil hier is, jouw mening telt hier écht. Jouw inbreng wordt gewaardeerd, serieus genomen en gebruikt. En vergeet niet, je werkt niet alleen aan deze projecten. Er werken in totaal ruim 20 developers en designers, onderverdeeld over 3 development teams. Voornamelijk bestaande uit Medior en Senior developers, die samen voor een inspirerende en ambitieuze omgeving zorgen. Hun visie is namelijk

Bekijk vacature »

PHP Developer

Zie jij mogelijkheden om onze tooling technisch te verbeteren en uit te bouwen? Over Jobmatix Jobmatix is een innovatieve en internationale speler op het gebied van jobmarketing. Onze jobmarketing automation tool helpt organisaties bij het aantrekken van nieuw talent door vacatures digitaal, geautomatiseerd en op een efficiënte manier te adverteren en onder de aandacht te brengen bij de doelgroep op 25+ jobboards. Volledig performance-based, waarbij organisaties betalen op basis van cost per click of cost per applicant. Maandelijks wordt onze jobmarketing automation tool al gebruikt door vele directe werkgevers, intermediairs en mediabureaus, waaronder Picnic, Rijkswaterstaat, AdverOnline, Schiphol, DPA, Teleperformance en

Bekijk vacature »

Front End Developer React Vue

Dit ga je doen Meewerken aan de implementaties en ontwikkeling van nieuwe functionaliteiten van de webapplicaties; Ontwikkelen met o.a. React en Vue en HTML/CSS, ook krijg je in verband met de samenwerking ook affiniteit met de backend Ruby on Rails; Ontwikkeling aan de front end voor de koppelingen tussen de diverse systemen; Ontwerpen van interfaces en een bijdrage leveren aan de gebruikerservaring; Zorgdragen voor hoge kwaliteit van code en jezelf (en anderen) blijven verbeteren; Als Senior Front End Developer begeleid je zelf ook FE-development projecten, hierin leid je de projecten en pak jij het initiatief op (bv integratieprojecten). Hier ga

Bekijk vacature »

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 »

Back end developer PHP, Laravel

Functie Jij komt te werken in ons webdevelopment team, wat bestaat uit 8 ervaren collega’s. Hiernaast hebben wij nog een team van 2 ontwikkelaars die aan native applicaties werken. Bij ons zijn er korte lijntjes en er hangt een gezellige informele werksfeer. Maar het belangrijkste is natuurlijk dat je aan geweldige applicaties zult gaan werken! Wij willen als organisatie niet te groot worden, we willen gewoon toffe dingen maken. Onze techstack bestaat momenteel uit: PHP, Laravel, Javascript, Typescript, Git, MySQL, Java, Kotlin, Xamarin. Samen met ons ga jij zorgen dat we puik werk leveren! Waarbij je bij elke fase in

Bekijk vacature »

.NET Developer

Dit ga je doen (Door)Ontwikkelen van het applicatielandschap; (Door)Ontwikkelen van microservices; Bouwen van nieuwe functionaliteiten; Verbeteringen aandragen voor het applicatielandschap; Sparren met de business. Hier ga je werken De organisatie is werkzaam in de financiële dienstverlening met meer dan 200 medewerkers en meer dan 250.000 eindgebruikers is het een van de grotere binnen haar branche. Je komt te werken in een team waarmee je verantwoordelijk bent voor het ontwikkelen en onderhouden van de financiële applicaties binnen de organisatie, denk hierbij aan het bouwen en onderhouden van portalen. Als .net developer ga jij het development team ondersteunen met de transitie naar

Bekijk vacature »

Low Code Developer voor o.a. overheidsprojecten!

Bedrijfsomschrijving Wil jij ook behoren tot de specialist in Low Code? Dan zou ik zeker aanraden om verder te lezen. Deze organisatie is ooit opgericht door twee studenten en is inmiddels uitgegroeid tot een serieuze werkgever met een groot aanzien op Low Code projecten. De sfeer is echter niet veranderd, er heerst een informele sfeer met een open deuren beleid, en hierin mag de eigen bar natuurlijk niet ontbreken. Momenteel maakt deze organisatie een flinke groei door en hier kan jij natuurlijk niet bij ontbreken. Daarom ben ik op zoek naar Low Code Developers met een degelijke technische achtergrond. Kennis

Bekijk vacature »

Team Lead/ Lead developer gezocht (Hands-on, PHP,

Functie Als Team Lead ben je de leider van één van de ontwikkelteams binnen de organisatie. Je leidt als lead developer een goed draaiend team dat werkt aan complexe en duurzame applicaties en API’s. Vanuit je kennis en ervaring ben je in staat het grote plaatje te blijven overzien, en kritisch mee te denken over bijvoorbeeld de architectuur, maar ook de algehele aanpak binnen het project. Je laat je team niet alleen technisch goed functioneren maar ben ook betrokken bij het menselijke aspect. Zo weet jij je collega’s te motiveren en begeleiden in hun dagelijkse werk. Buiten het team ben

Bekijk vacature »

Programmeur / Developer

Voor een familiebedrijf in Doetinchem, actief in de machinebouw voor de food-sector, zijn wij op zoek naar een programmeur / developer. In deze functie ben je werkzaam in een team van 5 medewerkers. Je werkzaamheden bestaan onder andere uit het verhelderen van requirements vanuit de opdrachtgever, de klant en de afdeling ontwikkeling. Je verricht haalbaarheidsstudies en werkt specificaties uit die je afstemt met de opdrachtgever. Je ontwerpt design in software en stemt af met je collega's. De huidige vision-systemen zijn geschreven in C software, welke draait op een CUDA platform. Je schrijft en codeert software en zal gaan testdraaien. Tot

Bekijk vacature »

SQL database developer

Functie omschrijving Voor een softwarebedrijf gespecialiseerd in het ontwikkelen van logistieke software in omgeving Tilburg zijn wij op zoek naar een ervaren SQL database developer. Je gaat werken aan uitdagende, complexe projecten. Iedere klant/project betekent maatwerk in de database. Jouw werkzaamheden zullen er als volgt uit zien: Je bent verantwoordelijk voor de gehele ontwikkelstraat. Van architectuur tot ontwikkeling Je gaat je bezig houden met het ontwerpen en ontwikkelen van MS SQL server databases. Je gebruikt hiervoor T-SQL als programmeer laag. Je begeleidt als lead developer de projecten bij klanten van A – Z. Je sluit aan bij meetings met klanten,

Bekijk vacature »

PHP Software Developer

Functie omschrijving PHP Software Developer gezocht! Voor een organisatie in de regio Zeist die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in een scrumteam aan de ontwikkeling van een medicatiebewakingssysteem; Meedenken over de mogelijkheden en onmogelijkheden van projecten;

Bekijk vacature »
Ozzie PHP

Ozzie PHP

27/05/2014 23:26:02
Quote Anchor link
Hallo allemaal,

Ik probeer voor mezelf wat duidelijker te krijgen wat precies een "valid state" van een object is. Regelmatig lees ik dat je via de constructor een object in een valid state moet brengen. Nu vraag ik me af hoe ik dat moet zien.

Een fictief voorbeeldje. Stel ik heb een class die een pannenkoek bakt :-)

Nu geef ik de ingrediënten voor de pannenkoek mee aan de constructor.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$pannenkoekenbakker
= new Pannenkoekenbakker($ingredienten);
?>

Ik heb nu dus de ingrediënten aan de constructor doorgegeven en deze worden geset als class property. Is de class nu in een "valid state"?

Als ik de de pannenkoek uit de pannenkoekenbakker wil halen, ziet dat er zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$pannenkoekenbakker
   = new Pannenkoekenbakker($ingredienten);
$heerlijke_pannenkoek = $pannenkoekenbakker->getPannenkoek();
?>

De oplettende lezer zal het misschien zijn opgevallen dat ik een pannenkoek opvraag, maar dat er nog geen pannenkoek is gebakken!

Mijn vraag is nu, was de Pannenkoekenbakker class hierboven dan wel in een "valid state"? Had de constructor eerst een pannenkoek moeten bakken om een "valid state" te bereiken? Of is het voldoende om in de constructor uitsluitend de ingrediënten te setten om in een "valid state" te geraken, en moet ik vervolgens zelf handmatig de "bakken" method aanroepen voordat ik een pannenkoek kan opvragen? Zo dus:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$pannenkoekenbakker
= new Pannenkoekenbakker($ingredienten);
$pannenkoekenbakker->bakken();
$heerlijke_pannenkoek = $pannenkoekenbakker->getPannenkoek();
?>

Wanneer is de "valid state" bereikt vraag ik me af? Als ik in dit laatste voorbeeld een pannenkoek opvraag, terwijl die nog niet is gebakken dan heb ik een probleem. Is het dan toch de taak van de constructor om de pannenkoek te bakken om zodoende een "valid state" te bereiken?
Gewijzigd op 27/05/2014 23:28:02 door Ozzie PHP
 
PHP hulp

PHP hulp

16/09/2024 01:09:52
 
Ward van der Put
Moderator

Ward van der Put

28/05/2014 07:31:50
Quote Anchor link
Je kunt (en moet) zelf bepalen wat een "valid state" is.

De class Pannenkoekenbakker kan bijvoorbeeld bij de aanroep van bakken() ook terugmelden: "Pannenkoeken bakken is op dit moment niet mogelijk, want mijn recources (ingrediënten) zijn op."

Het verhaal verandert als een class Pannenkoekenbakker altijd een object moet opleveren dat kan bakken(). Dan zul je dat in de constructor moeten regelen, zodat na new Pannenkoekenbakker() direct bakken() kan worden aangeroepen.

Je kunt het vergelijken met de constructors van PDO en MySQLi. Kan er geen databaseverbinding worden geopend, dan falen die en krijg je geen "valid" object. Logisch, want je hebt zonder connectie geen "valid" connectie-object: het object is een representatie van iets anders, maar dat bestaat niet, dus is het object "invalid". Dat kan, net zoals bij je Pannenkoekenbakker, gebeuren doordat je ze de verkeerde ingrediënten meegeeft of doordat er te weinig externe resources zijn (bijvoorbeeld door een "Too many connections").
 
Dos Moonen

Dos Moonen

28/05/2014 09:27:14
Quote Anchor link
"Is de class nu in een "valid state"?"
Ja, de class wel. Over het object kan ik niets zeggen. Maar als de constructor correct (case-by-case basis) geschreven is, dan wel. Er vanuit gaand dat er geen exception gegooid is natuurlijk, in dat gevan is er namelik geen object. (Er vanuit gaand dat er geen 'this leak' plaats vindt in de constructor.)

"De oplettende lezer zal het misschien zijn opgevallen dat ik een pannenkoek opvraag, maar dat er nog geen pannenkoek is gebakken!"
Dit klinkt eerder als een method die hernoemt moet worden zodat het duidelijk wordt dat er telkens een nieuwe pannenkoek gebakken wordt.
Als je eerst bakken() aan moet roepen voordat je getPannenkoek() successvol aan kan roepen zou het zo kunnen zijn dat je de fout hebt gemaakt om het Sequential coupling anti-pattern toe te passen. (Weer een case-by-case basis, een legitieme use case is dat de remove($key) methode alleen een non-null waarde returned als er eerst add($key, $value) is aangeroepen met de zelfde key.)
Een reden om zulke constructies te vermijden is dat het bij multi-threading niet echt lekker werkt. Dingen afleren is moeilijk, begin zo vroeg mogelijk.
 
Wouter J

Wouter J

28/05/2014 09:50:52
Quote Anchor link
En wat als we nu getPannenkoeken hernoemen naar bakken? Klaar!
 
Ozzie PHP

Ozzie PHP

28/05/2014 10:59:23
Quote Anchor link
Het is (vind ik) lastig om uit te leggen wat ik precies bedoel, dus vandaar ook het misschien wat vreemde voorbeeld van de Pannenkoekenbakker.

@Wouter

>> En wat als we nu getPannenkoeken hernoemen naar bakken? Klaar!

Dat zou kunnen, maar ik wil direct als ik getPannenkoek aanroep een pannenkoek krijgen, en ik wil niet dat ie dan nog moet worden gebakken. Ik wil dus dat dat pannenkoek al klaar ligt op het moment dat ik hem aanroep.

@Dos:

>> Ja, de class wel. Over het object kan ik niets zeggen.

Oké... goede opmerking. En daar heb ik gelijk een vraag over. Is het de taak van de constructor om een class in valid state te brengen, of een object?

>> Als je eerst bakken() aan moet roepen voordat je getPannenkoek() successvol aan kan roepen zou het zo kunnen zijn dat je de fout hebt gemaakt om het Sequential coupling anti-pattern toe te passen.

Dat is precies wat er aan de hand is! Ik moet eerst bakken alvorens ik mijn pannenkoek kan opvragen! Fijn om te leren dat dit dus een anti-pattern is wat ik niet moet gebruiken in dit geval. Is de oplossing dan inderdaad om in de constructor al te gaan bakken?

@Ward:

>> ...zodat na new Pannenkoekenbakker() direct bakken() kan worden aangeroepen.

Bedoel je dan dat bakken() IN de contructor zelf wordt aangeroepen?
 
Wouter J

Wouter J

28/05/2014 11:33:19
Quote Anchor link
>> Dat zou kunnen, maar ik wil direct als ik getPannenkoek aanroep een pannenkoek krijgen, en ik wil niet dat ie dan nog moet worden gebakken. Ik wil dus dat dat pannenkoek al klaar ligt op het moment dat ik hem aanroep.

Dat is behoorlijk krom toch? Of hij moet worden gebakken of op zijn minst worden opgewarmt. Dus een bakken() en opwarmen() method zou dan beter zijn.

Vertel eens je echte probleem, dan kunnen we daar feedback op geven.
 
Dos Moonen

Dos Moonen

28/05/2014 11:33:22
Quote Anchor link
Quote:
Is de oplossing dan inderdaad om in de constructor al te gaan bakken?

Geen idee. Dat zou betekenen dat één Pannenkoekenbakker object maar één pannenkoek kan bakken. En ik kreeg nou juist het idee dat Pannenkoekenbakker een factory was zodat je niet telkens een nieuw Pannenkoekenbakker object hoeft je maken voor pannenkoeken met de zelfde ingredienten. Dan zou de callee namelijk net zo goed zelf een Pannenkoek object aan kunnen maken.

Quote:
Is het de taak van de constructor om een class in valid state te brengen, of een object?

De constructor is (in PHP) een (speciale) instance method. Voor elk object wordt een constructor aangeroepen. Het kan dus niet zo zijn dat constructors de class in een valide staat moeten brengen aangezien het mogelijk is dat een een class wordt gebruikt zonder dat er een instantie van die class bestaat. Dat zou betekenen dat de constructor niet is uitgevoerd en dus de class zich in een invalide staat bevind. Dit mag niet voorkomen.

In Java zou je kunnen zeggen dat een constructor een speciaal non-static initilizer block is, welke constructor uitgevoerd wordt hangt af van de parameters die je mee geeft, je kan die daarna niet nog eens uitvoeren.
Een static initializer block is er logischerwijs verantwoordelijk voor om de class in een valide staat te brengen.
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
package x;

import y;
import z;

public class Test {
    // non-static initializer
    {
        System.out.println("wordt uitgevoerd tijdens het creren van een object, ik geloof n Object's constructor en vr alle andere parent constructors");
    }
    // static initialize block
    static {
        System.out.println("wordt uitgevoerd tijdens het laden van de class");
    }

    // conditioneel non-static initializer
    public Test(String fullName) {
        // ...
    }

    // conditioneel non-static initializer
    public Test(String firstName, String LastName) {
        // ...
    }
}


Als we dat vertalen naar PHP krijgen we zoiets als dit:
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
<?php

namespace x;

use y;
use z;
// static initializer block A {
echo "wordt uitgevoerd tijdens het laden van de class";
// }
class Test {

    // geen non-static initializer blocks mogelijk

    public function __construct($a, $b = NULL) {
        // ...
    }
}

// static initializer block B {
echo "wordt uitgevoerd tijdens het laden van de class";
// }
?>
Gewijzigd op 28/05/2014 11:39:33 door Dos Moonen
 
Ward van der Put
Moderator

Ward van der Put

28/05/2014 11:34:31
Quote Anchor link
Ozzie PHP op 28/05/2014 10:59:23:
@Ward:

>> ...zodat na new Pannenkoekenbakker() direct bakken() kan worden aangeroepen.

Bedoel je dan dat bakken() IN de contructor zelf wordt aangeroepen?

Nee, als een new Pannenkoekenbakker() alleen een geldige Pannenkoekenbakker is indien deze de methode bakken() ondersteunt maar het object daarvoor eerst in een bepaalde toestand moet worden gebracht, dan hoor je daarvoor de constructor te gebruiken.

Je moet voorkomen dat je objecten moet initialiseren. Dat is het domein van de constructor. Of anders gezegd: je wilt niet dat er ongeldige objecten in omloop zijn, want daarmee programmeer je bugs die later tot problemen kunnen leiden. Zoals het Wikipedia-artikel over sequential coupling ook zegt: de aanwezigheid van een methode met "init", "start" of "begin" is een veeg teken dat je een anti-pattern gebruikt.

Wil je niet de constructor gebruiken, dan kun je een ander creational pattern gebruiken om de verantwoordelijkheid te delegeren aan een andere klasse, bijvoorbeeld aan een PannenkoekenbakkerInstituut. Dat PannenkoekenbakkerInstituut zorgt er vervolgens voor dat er alleen Pannenkoekenbakkers te werk worden gesteld die de methode bakken() ondersteunen.
 
Ozzie PHP

Ozzie PHP

28/05/2014 13:06:23
Quote Anchor link
Dankjewel voor de reacties.

@Dos: oké. Dank je voor de toelichting. Een constructor brengt dus een object in een valide staat.

Ik zal nog even op de vraag van Wouter in gaan.

>> Vertel eens je echte probleem, dan kunnen we daar feedback op geven.

Het was een gedachte waar ik mee speelde. Lastig om uit te leggen. Het had te maken met als je iets wilt gebruiken wat eerst geconfigureerd moet worden. Maar beter zou je dan het Factory pattern kunnen gebruiken denk ik nu. Stel je wilt bijv. services configureren, ik zat te denken... moet je dan zoiets doen:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
$configurator
= new ServicesConfigurator($input);
$configurator->configure(); // hiet zat dus mijn twijfel, moet de constructor dit niet doen?
$services = $configurator->getServices();
?>

Nu ik er even met jullie over heb gebabbeld denk ik dat dit een beter oplossing is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
$services
= ServicesBuilder::build($input);
?>
Gewijzigd op 28/05/2014 13:07:01 door Ozzie PHP
 
NOLot -

NOLot -

28/05/2014 14:59:02
Quote Anchor link
Factory pattern zozo
 
Ozzie PHP

Ozzie PHP

28/05/2014 17:07:33
Quote Anchor link
>> Factory pattern zozo

Zo heeft dat toch? Of zeg ik iets raars nu?
 
Wouter J

Wouter J

28/05/2014 19:54:29
Quote Anchor link
Volgens mij gaan we nu compleet de verkeerde kant op.

Ipv nog een klasse erbij te maken omdat we zo graag een aparte configure method willen hebben moeten we eerder gaan nadenken of dit wel is wat je wilt.

Waarom zou ServiceConfigurator bijv. niet met meerdere inputs kunnen werken? Waarom zou ik per input een nieuwe instance moeten aanmaken? Het zou veel logischer zijn als ServiceConfigurator een stateless class zou zijn en de configure method de services in de container zou zetten aan de hand van de input:
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
<?php

$loader
= new ContainerChainLoader(array(
    $yamlLoader, $xmlLoader, $phpLoader
));
$resources = array(
    BASE_DIR.'/config/services.yml',
    // ...
);
foreach ($modules as $module) {
    $resources[] = $module->getConfigResources();
}


$containerConfig = new SeriveConfigurator($loader);

$containerConfig->configure($container, $resources);
?>
 
Ozzie PHP

Ozzie PHP

28/05/2014 21:11:43
Quote Anchor link
Hmmm... dat is iets om over na te denken inderdaad. Met stateless bedoel je dat er geen class properties aanwezig zijn?

Waarom geef je trouwens 3 loaders mee?
 



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.