OOP vraagjes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior Front-end developer

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »

Software Programmeur

Functie omschrijving Voor een informele club in omgeving Delft zijn wij op zoek naar versterking. Ben jij op zoek naar een nieuwe uitdaging als Software Programmeur lees dan snel verder! Als ontwikkelaar kom je terecht op een afdeling van 6 medewerkers. Werkzaamheden Programmeur Je bent bezig met het ontwikkelen van software en webapplicaties. Je kunt technische klussen uitvoeren op locatie. Je onderhoudt contact met de projectleider om er zeker van te zijn dat een project goed verloopt. Je zult klanten ondersteunen. Verder zul je technische ontwerpen en gebruikersdocumentaties schrijven en deze onderhouden. Er wordt voornamelijk gewerkt met PHP, Java en

Bekijk vacature »

C# .NET Developer

Dit ga je doen Je richt je op het doorontwikkelen en herstructureren van het platform; Je werkt in teamverband en zelfstandig aan uitdagende projecten voor verschillende klanten; Softwareontwikkeling middels C# .NET; Je staat in contact met verschillende opdrachtgevers om de klantwensen te bespreken en deze vervolgens te ontwikkelen; Verbeteren van bedrijfsprocessen; Implementaties. Hier ga je werken Als .NET Developer kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet

Bekijk vacature »

Fasttrack learning & development voor Java dev

Wat je gaat doen: Wij zoeken enthousiaste en ambitieuze junior en medior ontwikkelaars die toe zijn aan de volgende stap in hun carrière. Wij helpen je op je pad naar senior ontwikkelaar door ons fasttrack learning en development programma. Na een kort en intensief programma ga jij aan de slag bij klanten van DPA. Daarnaast krijg je veel ruimte om je te ontwikkelen als persoon en als specialist. De eerste maand gaan we aan de slag om je certificeringen te behalen waaronder OCP (Oracle Certified Professional). Daarnaast nemen we een deepdive in Spring Boot. Ook laten we je kennismaken met

Bekijk vacature »

C++ Ontwikkelaar

Functieomschrijving Ben jij toe aan een nieuwe uitdaging en werk je graag en goed in C++ en C#? Dan zijn we op zoek naar jou! Dit bedrijf is dé specialist op het gebied van automatiseringssoftware voor een specifieke branche en ze zijn per direct op zoek naar versterking in hun development team. Wat jij gaat doen binnen jouw rol als C++ ontwikkelaar; Je vertaalt de wensen van gebruikers naar een functioneel ontwerp. Je houdt je bezig met het ontwerpen, programmeren en testen van product aanpassingen. Je gaat nieuwe product releases implementeren in de projectteams. Je gaat de effecten van nieuwe

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 »

Lead Fullstack developer

Functie omschrijving Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Wij zijn op zoek naar een full stack developer die zich bezig wil bezig houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator door middel van

Bekijk vacature »

Microsoft Acess Developer

Functieomschrijving Wat ga je doen? Heb jij ongeveer 3 jaar ervaring als Software Developer, en komen de volgende kennisgebieden jou niet vreemd voor: MS Acces, C# & SQL? Vind jij het daarnaast leuk om maatwerk software te ontwikkelen voor klanten in een bijzondere branche? Lees dan snel verder! Als developer ben jij samen met een gemotiveerd team van 10 collega’s verantwoordelijk voor het creëren van aangemeten software voor klanten. Je bent klantvriendelijk en oplossingsgericht ingesteld, omdat het essentieel is om de klanten zo goed mogelijk te helpen met hun uitdagingen. Het is mogelijk om vanuit huis je werkzaamheden uit te

Bekijk vacature »

Back end Node.js developer

Functie Het ontwikkelteam bestaat momenteel uit 5 (back-end) Developers, 2 systeembeheerders, 1 DevOps engineer, 1 Tech Lead en 2 Scrum Masters. Samen wordt er doorontwikkeld aan twee SaaS-platformen die in een hoog tempo doorontwikkeld moeten worden. Omdat innovatie een belangrijk speerpunt binnen de organisatie is, wordt er ook continu naar snellere en slimmere oplossingen te bedenken en realiseren. Als Back-end Developer hou jij je dagelijks bezig met vraagstukken zoals: API-development, high volume datastromen, het ontwikkelen van Bots aan de hand van A.I. Daarnaast denk en werk jij mee aan de onlineapplicaties voor klanten. Er wordt zelfstandig en in teamverband gewerkt

Bekijk vacature »

Ontwikkelaar Centrale Monitoring

Ontwikkelaar centrale Monitoring Functieomschrijving Wil jij een bijdrage leveren aan het onderhoud, opzetten en ontwikkelingen van technologieën van SSC-ICT, een van de grootste ICT-dienstverleners van en voor de Rijksoverheid? Je komt als monitorspecialist te werken bij team Operations Management Services. Dit team werkt aan het stabiliseren en waarborgen van een betrouwbare monitoromgeving voor 7 ministeries. Jij begeleidt het implementatieproces van de te monitoren technologieën, onder andere via management packs, connectoren en API's. Je hebt hiervoor veel contact met interne en externe klanten, die hun wensen op het gebied van monitoring aan jou doorgeven. Je beoordeelt deze wensen en komt met

Bekijk vacature »

Front end developer React

Functie Wij zijn van origine een wordpress bureau, maar sinds 2006 zijn wij dit wel redelijk ontgroeid. Naar mate de jaren verstreken zijn we gegroeid in omvang, maar ook in de complexiteit van opdrachten waarin wij onze klanten kunnen bedienen. Momenteel bestaat onze organisatie uit 4 front end developers, 12 back end developer 3 projectmanagers en een 2 koppig management. Wij zijn een hele informele, bijna familiaire organisatie. Geen strak pak of overhemd, nee gewoon dragen waar jij je prettig bij voelt. De gemiddelde leeftijd ligt tussen de 25 en 30 en wij doen er veel aan om onze hechte

Bekijk vacature »

Senior Front-end Developer

Dit ga je doen Met behulp van diverse programmeertalen ontwikkelen van Front-end software; Het begeleiden van het front-end team; Het oplossen van incidenten; Het bijhouden van een backlog; Je hebt een actieve bijdrage in de wekelijkse overleggen met de omliggende teams; Je houdt trends bij en adviseert het management hierover waar nodig; Helder communiceren met de stakeholders om hen zo mee te nemen in projecten en laten inzien wat de duur en toegevoegde waarde van bepaalde projecten is. Hier ga je werken Deze organisatie heeft circa 40 miljoen bezoekers per maand en heeft innovatie hoog in het vaandel staan. Het

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Full Stack Software Ontwikkelaar gezocht! Voor een bedrijf in de regio van Ermelo zijn wij op zoek naar een Software Ontwikkelaar die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van SaaS applicatie van dit bedrijf. Hierbij ga jij voor- en samenwerken met de klanten van de organisatie, het is hierbij dus van groot belang dat je communicatief vaardig bent en dat je beschikt over beheersing van zowel de Nederlandse als Engelse taal. Bedrijfsprofiel Waar ga je werken? Altijd al in een echt familiebedrijf willen werken? Dan is dit je kans! Het bedrijf waar je komt te

Bekijk vacature »

Senior Front end developer Digital Agency

Functie Jij als Front end developer komt te werken in een van de 8 multidisciplinaire teams binnen de organisatie. Deze teams werken op basis van Scrum agile in 2 wekelijkse sprints. De grootte van de teams varieert van 9-14 collega’s en bestaan altijd uit één of meerdere project managers en een project manager. Samen met je team werk je aan verschillende projecten voor uiteenlopende klanten zoals grote multinationals tot het kleine mkb. De stack waarmee gewerkt wordt is voornamelijk Javascript, ES6, Es.next, HTML, CSS, React.js en Node.js. Wat deze organisatie onderscheid is dat ze echt langdurige partnerships aangaan met hun

Bekijk vacature »

Medior Front end developer React

Functie Voor deze functie ben ik op zoek naar een enthousiaste front end developer die communicatief vaardig is. Jij wordt onderdeel van een enthousiast jong team dat werkt aan grote websites. Binnen jouw rol ben jij diegene die de vertaling maakt van design naar functionele code en zorg jij voor goede experience op meerdere platformen. Dit doe je natuurlijk door gebruik te maken van Javascript, HTML, CSS en React. Daarnaast wordt er gebruik gemaakt van Webcomponents en verschillende authenticatie tools. Doordat er hier gestreefd wordt naar de beste gebruikerservaringen, wordt het product constant doorontwikkeld. Hierdoor blijven ze voor op de

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

09/10/2013 13:25:26
Quote Anchor link
Hoi mensen,

Gisteren hier op het forum weer een goed gesprek gehad over mijn framework. En dat heeft me weer even aan het denken gezet. Begin dit jaar was ik begonnnen aan een framework. Dat heeft even stilgelegen, en nu ben ik aan de slag gegaan met versie 2 :) En dan wil ik ook namespaces en exceptions gaan gebruiken.

Nu mijn vragen:

1) Stel ik ga een class maken waarmee ik directories kan aanmaken en verwijderen. Dan heb je dus 2 functies/methods, een "make" functie en een "remove" functie. Mag je deze functies in 1 class zetten, of zijn dit eigenlijk 2 aparte classes. Wat is goed OOP gebruik? Als je 1 class gebruikt, krijg je zoiets:

Directory::make($dir) en Directory::remove($dir)

Zou je 2 classes gebruiken dan krijg je zoiets:

DirectoryMaker::make($dir) en DirectoryRemover::remove($dir)

2) Stel ik heb een class met namespace Ozzie\Core en in die class moet ik ergens een directory verwijderen. De directory class heeft namespace Ozzie\Directory. Nu heb ik verschillende opties om de directory class aan te roepen, en ik ben benieuwd hoe jullie dat doen:

a) \Ozzie\Directory\Directory::make($dir);
b) boven de class plaats je "use \Ozzie\Directory\Directory;" en zodra je de directory class nodig hebt zeg je "Directory::make($dir);"
c) anders

3) In versie 1 van mijn framework stopte ik alle classes in de service-container. Echter, ik neem aan dat een Directory class niet echt een service is (of wel?). Het lijkt me dat je in een class niet dit gaat doen: $services->get('directory')->make($dir). Hetzelfde geldt bijvoorbeeld voor het inladen/verwijderen van bestanden, of het throwen van een Exception. Ik neem aan dat dit soort zaken eigenlijk niet in een service-container thuishoort.

Nu is mijn vraag, wanneer hoort iets WEL in de service-container thuis? Stel we hebben een e-mail service die automatisch geconfigureerd wordt, ja... dan hebben we het over een service. Maar neem nu bijvoorbeeld een User. Is een User ook een service? Kortom, de vraag is "Wat maakt een class tot een service? Wanneer hoort een class thuis in een service-container?"

Ik hoop dat iemand me weer een eindje vooruit kan helpen. Alvast dank!
Gewijzigd op 09/10/2013 13:28:29 door Ozzie PHP
 
PHP hulp

PHP hulp

04/01/2025 02:51:25
 
Ward van der Put
Moderator

Ward van der Put

09/10/2013 13:52:52
Quote Anchor link
Voor simpele objecten kun je vaak uitgaan van CRUD (create-read-update-delete) en het active record pattern. Ik zou voor een directory dus één klasse gebruiken met twee methode: Directory::create() en Directory::delete().
 
Ozzie PHP

Ozzie PHP

09/10/2013 13:58:21
Quote Anchor link
Thanks Ward! Kies je dan ook daadwerkelijk voor de benaming "create" (en niet voor "make")?

Meer reacties zijn welkom! (vooral ook op vraag 2 en 3)
 
Ward van der Put
Moderator

Ward van der Put

09/10/2013 14:11:31
Quote Anchor link
Ozzie PHP op 09/10/2013 13:58:21:
Kies je dan ook daadwerkelijk voor de benaming "create" (en niet voor "make")?
Als een active record pattern een databasekoppeling heeft, wordt create() vaak insert(). In lijn met SQL heb je dan insert-update-delete. Maar je ziet wel vaker synoniemen, bijvoorbeeld remove() in plaats van delete() of find() in plaats van search() als je CRUD uitbreidt tot SCRUD.

Vergis je je vaak bij het programmeren, dan kun je altijd nog een alias invoeren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<?php
public function remove()
{

    $this->delete();
}

?>
 
Ozzie PHP

Ozzie PHP

09/10/2013 14:14:30
Quote Anchor link
Ah oke :) En welke benamingen gebruik JIJ ZELF om iets te maken en verwijderen (bijv. een directory)?
P.S. weet jij een antwoord op vraag 2 en 3?
 
Ward van der Put
Moderator

Ward van der Put

09/10/2013 14:37:49
Quote Anchor link
Ik gebruik CRUD (create-read-update-delete), maar eigenlijk alleen omdat de afkorting gemakkelijk te onthouden is. In het verlengde van daarvan gebruik ik SCRUD (Search-CRUD) en SCRUDL (SCRUD-List).

Niet helemaal consistent, maar voor mij wel duidelijk: als de search() in SCRUD niet voldoende is, dan krijgt de klasse een find_by_id(), find_by_username(), enzovoort.

Bij 2 zou ik Directory::create($dir) gebruiken als een statische methode, maar dáárover verschillen de meningen.

Een servicecontainer gebruik ik zelden of nooit.
 
Ozzie PHP

Ozzie PHP

09/10/2013 14:48:38
Quote Anchor link
Thanks Ward. Met list bedoel je dan dat je een overzicht opvraagt of iets dergelijks? Dus $products->list(); geeft alle producten?

find_by_id vind ik wel grappig. Jij laat de variabele dus terugkomen in de functienaam? Doe je dat altijd? Waarom niet gewoon find($id)? Of gaat het hier om 1 class met meerdere "find" varianten?

Quote:
Bij 2 zou ik Directory::create($dir) gebruiken als een statische methode..."

Ja, dat zou ik ook doen. Maar de vraag ging er eigenlijk om hoe je de juiste namespace gebruikt. Roep je de class met z'n volledige naam aan, dus "\Ozzie\Directory\Directory::make($dir);" of maak je gebruik van "use \Ozzie\Directory\Directory"?

Quote:
Een servicecontainer gebruik ik zelden of nooit.

Ah oké. Hopelijk kan iemand anders dat dan toelichten. Het gaat er mij vooral om wat nu precies een service is. Wanneer is een class een service?
 
Ward van der Put
Moderator

Ward van der Put

09/10/2013 15:04:38
Quote Anchor link
Ozzie PHP op 09/10/2013 14:48:38:
Thanks Ward. Met list bedoel je dan dat je een overzicht opvraagt of iets dergelijks? Dus $products->list(); geeft alle producten?

Bijvoorbeeld een Cart::list() inderdaad voor een lijst met de inhoud van een winkelwagentje.

Ozzie PHP op 09/10/2013 14:48:38:
find_by_id vind ik wel grappig. Jij laat de variabele dus terugkomen in de functienaam? Doe je dat altijd? Waarom niet gewoon find($id)? Of gaat het hier om 1 class met meerdere "find" varianten?

Dat doe ik uiteraard alleen als er naast een find_by_id() bijvoorbeeld een find_by_username() is. Het geldt zelfs algemener: ik gebruik $id, tenzij dat in een context onduidelijk is omdat er naast een $user_id nog een $order_id is.
Gewijzigd op 09/10/2013 15:04:52 door Ward van der Put
 
Ozzie PHP

Ozzie PHP

09/10/2013 15:15:31
Quote Anchor link
Ah ja, oké... duidelijk :)

Iemand die nog mijn vraag over de namespace en services kan beantwoorden?
 
Joakim Broden

Joakim Broden

09/10/2013 15:22:08
Quote Anchor link
Vraag 1: Gewoon 1 class bijvoorbeeld FileSystem (renamen van bestanden, verwijderen van bestanden, verplaatsen van bestanden etc)
Vraag 2: b
Vraag c: Als je iets vaker gebruikt in je framework zoals config, database zet je in je service container. Hoe vaak verstuur je een e-mail? Niet vaak dus die zou ik bijvoorbeeld niet in de service container zetten maar gewoon pas aanmaken wanneer je hem daadwerkelijk gebruikt bv op login pagina etc.

En wat betreft de benamingen van functies, ik hou altijd alles zoveel mogelijk het zelfde in alle classes in mijn framework. Dus niet de ene class write, en de andere weer set. Gewoon alles set, wel zo makkelijk om te gebruiken vind ik.
 
Ozzie PHP

Ozzie PHP

09/10/2013 15:27:25
Quote Anchor link
Thanks Hertog!

1) Waarom noem je het eigenlijk FileSystem en niet gewoon File?
2) oké! :)
3) Dus eigenlijk zeg je dat jouw criterium of iets wel of niet een service is, wordt bepaald door hoe vaak je die class gebruikt? Klopt dat? En als we dan een User hebben, die heb je vaak nodig! Is dat dan een service?
 
Joakim Broden

Joakim Broden

09/10/2013 15:35:57
Quote Anchor link
Vraag 1: Omdat File bijvoorbeeld ook een andere class kan zijn wat specifiek op 1 bestand is gericht. Denk bijvoorbeeld aan het controleren van een bestand voor het uploaden (wat ik dan eerder een Validator\File zou vinden). FileSystem vind ik wat ruimer begrip aangezien het om bestanden en mappen gaat.

Vraag 2: Hangt er van af, als je maar een klein deel van de website afgeschermt is voor gebruikers heb je niet persee de User class nodig (misschien is Service wel een class die eigenlijk noodzakelijk is voor de website om te kunnen werken) en roep je hem niet eens aan. Als je persee voor de website een ingelogde user nodig hebt (bijvoorbeeld CMS) dan zou ik User class wel in de service container zetten.
 
Ozzie PHP

Ozzie PHP

09/10/2013 15:56:54
Quote Anchor link
1) Ah zo. Dus, als ik je goed begrijp, zou je in jouw FileSystem class bijv. de methods "create", "load" en "remove" hebben, maar het valideren van een file zou je niet in deze class zetten?

p.s. Zou je dit niet kunnen oplossen met een namespace? Dat je de class wel gewoon File noemt maar de namespace System geeft? Dan krijg je dus \System\File::remove();

2) Hmm, oké. Het is me nog steeds niet helemaal duidelijk. Ik dacht dat een service iets is wat je even "makkelijk uit de kast kunt pakken als je het nodig hebt". Bijvoorbeeld, ik moet ergens een pdf maken. Ah, mooi... ik pak even de PDF service erbij. Maar als je dan kijkt HOE VAAK je een PDF maakt? Tja, dat is dus bijna nooit. Voor m'n gevoel is een pdf-maker wel een service, maar het strookt niet met het criterium dat "een service een class is doe vaak wordt gebruikt". Snap je wat ik bedoel?

Een andere reden die ik hier iemand op het forum heb horen zeggen, is dat je een service container ook gebruikt om makkelijk je classes te kunnen beheren en te wijzigen. Stel je hebt een PDF class, en na een jaar vind je een veel beter PDF class, namelijk PDFultimate. Het nadeel is dat je nu overal in je project waar je $pdf = new PDF(); hebt gezet, je dit moet vervangen door $pdf = new PDFultimate(); Je moet dus een hoop bestanden aanpassen. Als je echter pdf als service had ingesteld, hoefde je alleen de class-naam in het configuratiebestand te vervangen. Oké, dit is natuurlijk handig... maar heeft eigenlijk weinig te maken met het feit of een class wel of niet als een service moet worden gezien. En op die vraag, wanneer een class een service is, blijft het antwoord toch erg wazig.
Gewijzigd op 09/10/2013 15:59:06 door Ozzie PHP
 
Joakim Broden

Joakim Broden

09/10/2013 16:21:35
Quote Anchor link
Ja maar als je het zo bekijkt kun je alles als een Service zien want elke class kan veranderen na verloop van tijd.

Als je een betere PDF class vind, kun je toch de Class zelf aan te passen ipv de Class naam? Want als je een nieuwe PDF class hebt heb je misschien ook andere methods waardoor je als nog heel veel andere bestanden moet aanpassen. Als je de nieuwe code van de PDF class gewoon in de huidige PDF class zet is dat toch veel makkelijker (overbodige methods bv exception gooien dat het een oude overbodige method is)

Of zie ik dit verkeerd?
 
Wouter J

Wouter J

09/10/2013 17:00:59
Quote Anchor link
Zonder alle stuff hierboven gelezen te hebben:

Elke class die een andere class nodig hebt en elke class die die andere class nodig zou kunnen hebben zijn services. Een Mailer kan gebruikt worden door een class, dus die stoppen we in de container. Een NewsLetterManager heeft die mailer nodig, dus die staat ook in de container.
Een exception is een class dat alleen waardes vasthoudt, waarbij die waarden telkens anders zijn. Dat komt dus niet in een container.

Een directory class komt er ook niet in, maar ik zou er een FileSystem class van maken, die dus kan omgaan met directories en files, dan zou ik hem er wel in zetten en afstappen van die static methods.

Of je een service nou vaak of niet vaak gebruikt maakt niks uit. Het mooie van een service container is juist dat het lazy-loaded is, zodra geen een class de service opvraagt zal hij ook nooit aangemaakt worden en heb je dus geen snelheid verspilt.
En het mooie van een service container is dat je een klasse opvraagt, maar geen idee heeft wat dat nou voor class is. Ik vraag iets op wat een pdf kan maken en waarvan ik, doormiddel van interfaces, zeker van ben dat hij bepaalde methods heeft. Of dat nou Pietje_PDF(), Ozzie\Core\PDF\Creator(), Zend_Pdf() of Whaha_Ik_Doe_Niks_Pdf() class is maakt je niks uit, als hij maar zijn taak doet. Dat maakt het heel makkelijk om dus van PDF class te wisselen.

Een ander mooi voordeel van een service container is dat alle objecten standaard niet opnieuw worden geinitialiseerd. Dat gebeurd 1 keer en daarna niet meer, behalve als je expliciet zegt dat hij elke keer een nieuwe instance moet terug geven. Maar in dat geval is de class 'stateful', en dat is iets wat je moet zien te vermijden.
Gewijzigd op 09/10/2013 17:03:02 door Wouter J
 
Ozzie PHP

Ozzie PHP

09/10/2013 17:42:29
Quote Anchor link
Haha kijk, 2 mooie reacties... die elkaar ook aardig tegenspreken :) En dat zorgt dus weer voor discussie... nice :-)

Quote:
Ja maar als je het zo bekijkt kun je alles als een Service zien want elke class kan veranderen na verloop van tijd.

Precies! Dat is dus ook waarom ik twijfel wat nu wel en niet een service is.

Quote:
...
Of zie ik dit verkeerd?

Dat is ook een gedachtengang die ik had, maar ik denk dat het niet klopt. Stel dat het bijv. om een class uit een library gaat, met eigen naamgeving e.d. dan kun je (denk ik) niet zomaar de ene class naar de andere ombouwen. Het mooie van zo'n container is dan dat je alleen de class-naam wijzigt. Maar wellicht kan Wouter hier even z'n licht over laten schijnen?

Quote:
Elke class die een andere class nodig hebt en elke class die die andere class nodig zou kunnen hebben zijn services.

Ah, dit is nieuw. Maar dit geldt dan toch vrijwel voor iedere class, want iedere class zou een andere class nodig kunnen hebben. Jij zegt dat een Exception class niet in de container hoort, maar... om maar eens iets te noemen... een databaseconnection class moet een Exception kunnen gooien en heeft dus een Exception class nodig. Het is een class die een andere class nodig heeft. Dan zou het toch ook in de container moeten?

Met het overige ben ik het trouwens helemaal eens! Ik wil alleen nog even heel duidelijk voor mezelf krijgen wanneer iets een service is. Een soort van definitie als het ware. Een service is een class die ... en ... en... Zoiets zeg maar. Zodat ik aan de hand van die definitie makkelijk en snel kan bepalen of het om een service gaat. Kun jij zo'n definitie bedenken?
Gewijzigd op 09/10/2013 17:42:54 door Ozzie PHP
 
Wouter J

Wouter J

09/10/2013 17:56:46
Quote Anchor link
Quote:
Kun jij zo'n definitie bedenken?

Een service is een class die (1) een andere class nodig hebt en (2) die (a) die andere class nodig zou kunnen hebben en (b) die vaste waarde in zijn constructor heeft niet niet veranderd hoeven te worden.

Dat vat het denk ik wel mooi samen. Een container 'bevriest'/gaat op slot, dus dan kun je de waardes die je aan een constructor meegeeft telkens veranderen.

Quote:
Maar wellicht kan Wouter hier even z'n licht over laten schijnen?

Ik snap niet precies wat jullie willen. Maar wellicht dat een, zoals Symfony dat noemt, "bridge" de uitkomst bied. Stel we hebben een interface, Ozzie\Bridge\PdfBridge\CreatorInterface. Deze bepaalt welke methods een PDF creator moet hebben. Zodra we een class hebben, zoals Pietje_Pdf() en die willen gebruiken als Pdf creator in onze container maken we een bridge class, die zorgt dat je alsnog de methods in de CreatorInterface kunt gebruiken met deze klasse:
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
<?php
namespace Ozzie\Bridge\PdfBridge;

use Ozzie\Bridge\PdfBridge\CreatorInterface;

class PietjePdfCreatorBridge extends Pietje_Pdf implements CreatorInterface
{
    // method from interface
    public function create($text)
    {

        return $this->make($text); // method from Pietje_Pdf
    }
}

?>


Nu registreer je Ozzie\Bridge\PdfBridge\PietjePdfCreatorBridge en je kunt de service altijd gebruiken!
Gewijzigd op 09/10/2013 17:57:58 door Wouter J
 
Ozzie PHP

Ozzie PHP

09/10/2013 19:54:02
Quote Anchor link
Quote:
Ik snap niet precies wat jullie willen.

Het ging er niet om dat we iets wilden. De stelling van Hertog Jan was dat je geen service nodig hebt, omdat je gewoon de class zelf kunt aanpassen. Dus stel je hebt overal in je code $pdf = new PDF(); staan, en je wil dan die PDF class een keer veranderen, dan zou Hertog Jan die PDF class zelf aanpassen. Hij zou dus de code in die class vervangen. (In tegenstelling tot een service waarbij je alleen de class-naam in het config-bestand hoeft aan te passen.) De vraag was of jij het eens bent met die stelling.

Quote:
Een service is een class die (1) een andere class nodig hebt en (2) die (a) die andere class nodig zou kunnen hebben en (b) die vaste waarde in zijn constructor heeft niet niet veranderd hoeven te worden.

Aha! Daar ga ik even wat dieper op in...

Een service is een class die:
1 ) een andere class nodig heeft EN
2a) die die andere class nodig zou kunnen hebben EN
2b) die vaste waarde in zijn constructor heeft niet niet veranderd hoeven te worden.

Wouter, ik probeer dit even voor mezelf begrijpelijk te gaan maken.

Punt 1 en punt 2a, kunnen we die samenvoegen tot:

Een service is een class die een andere class nodig heeft of nodig zou kunnen hebben?

Punt 2b. Hier bedoel je waarschijnlijk mee dat je overal in je project dezelfde (geinitialiseerde) service aanroept. Ik neem aan dat dit betrekking heeft op deze eerdere opmerking van jou: "Een ander mooi voordeel van een service container is dat alle objecten standaard niet opnieuw worden geinitialiseerd." Is dat wat je hier bedoelt? En meteen vraag ik me dan af, als je de service zo instelt dat hij wel telkens opnieuw wordt geinitialisseerd, is het dan eigenlijk geen service?

Laat ik van dit laatste een voorbeeld geven. Stel ik heb een of andere mailer:

$mailer = $this->services->get('mailer');
$mailer->setTo('Wouter', '[email protected]');
$mailer->setSubject('hoe gaat het?');
$mailer->setMessage('Hallo, hoe gaat het ermee?');
$mailer->send();

Stel nu, heel ergens anders in de code wil ik weer een mail versturen, maar naar totaal iemand anders, met een ander onderwerp en ander bericht. Dan kan ik me voorstellen dat ik aan mijn services een "nieuwe" mailer opvraag, waar nog geen gegevens in staan. Toch heb ik het idee dat die mailer (ondanks dat ie telkens een nieuw exemplaar teruggeeft) wel een service is. Of klopt dat dan niet?

Quote:
Een container 'bevriest'/gaat op slot, dus dan kun je de waardes die je aan een constructor meegeeft telkens veranderen.

Hier kan ik je even niet volgen?
 
Wouter J

Wouter J

10/10/2013 00:45:25
Quote Anchor link
Quote:
De vraag was of jij het eens bent met die stelling.

Nee, totaal niet. OO gaat er juist om dat je alle aanpassingen kan doen zonder de class te hoeven aanpassen.

Quote:
Wouter, ik probeer dit even voor mezelf begrijpelijk te gaan maken.

Goed, ik deelde het express op in 1 en 2. Dat zijn de 2 voorwaarden, voorwaarde 2 heeft 2 voorwaardes die in elkaar horen. Dus als een class een deze class nodig heeft, maar zijn constructor parameters zijn telkens anders is het nog steeds geen service.

Laat ik eerst even kijken wat een container doet. Deze maakt een object aan wanneer nodig. De constructor heeft bepaalde argumenten nodig, sommige zijn services andere static waardes (parameters genaamd).
Nadat alle services en parameters zijn geladen wordt de klasse op slot gezet, je kan geen parameters meer veranderen en de waardes die je aan een constructor meegeeft zijn dus altijd hetzelfde. Het maakt niet uit of je die nou 1x of 100x opnieuw laat aanmaken, je maakt hem altijd aan met dezelfde argumenten. Je krijgt alleen telkens een nieuwe instance.

En dat bedoelde ik dus met 2b. Een exception class is geen service, omdat je telkens bij het aanroepen andere message, code en previous exceptions moet meegeven aan de constructor.
Een Mailer service is wel een service, aangezien de waarde van de constructor (host, port, username, etc.) wel telkens hetzelfde blijven in 1 applicatie.
Een PDF generator is ook een service, aangezien deze helemaal geen argumenten nodig heeft.
 
Ozzie PHP

Ozzie PHP

10/10/2013 00:59:25
Quote Anchor link
Quote:
Nee, totaal niet. OO gaat er juist om dat je alle aanpassingen kan doen zonder de class te hoeven aanpassen."

Oké, dat idee had ik ook.

Quote:
Dus als een class een deze class nodig heeft, maar zijn constructor parameters zijn telkens anders is het nog steeds geen service.

Dus wat jij wilt zeggen is dat wanneer je de class telkens aanroept met andere variabelen in de constructor, dan is het geen service. Correct? Dit betekent dus wel dat ik die betreffende class telkens "hardcoded" moet gebruiken. Dus $class = new Class(); Als ik dan een nieuwe versie van die class wil gebruiken, dan moet ik óf overal de class-naam aanpassen, of ik moet de class zelf aanpassen. Maar volgens mij hadden we zojuist besloten dat dat niet handig is, toch?

Quote:
Het maakt niet uit of je die nou 1x of 100x opnieuw laat aanmaken, je maakt hem altijd aan met dezelfde argumenten. Je krijgt alleen telkens een nieuwe instance.

Euh, wacht even... je krijgt toch niet telkens een nieuwe instance? Je krijgt toch juist telkens dezelfde instance terug?

Quote:
Een PDF generator is ook een service, aangezien deze helemaal geen argumenten nodig heeft.

Dit klopt dan weer niet met jouw eerdere uitspraak:

Quote:
Een service is een class die (1) een andere class nodig hebt ...

Maar als ik er nu zo over nadenk, dan komt het er eigenlijk op neer dat een service een class is die gedurende de request niet verandert. Je maakt 'm eenmaal aan (ongeacht of ie wel of geen contructor parameters nodig heeft) en vervolgens wordt dat betreffende object gebruikt. Services zijn dus eigenlijk onveranderende objecten???
 
Wouter J

Wouter J

10/10/2013 01:09:44
Quote Anchor link
Natuurlijk kunnen services wel veranderen, by default krijg je altijd dezelfde instance maar je kan natuurlijk ook per service instellen om altijd een nieuwe instance terug te geven.

>> Maar volgens mij hadden we zojuist besloten dat dat niet handig is, toch?

Noem mij eens klassen anders dan exception en entities (die toch al geen services zijn), die nog meer telkens andere constructor variabelen hebben?

>> Dit klopt dan weer niet met jouw eerdere uitspraak:

Klopt perfect. PDF creator is een service omdat hij aan voorwaarde 2 voldoet: classes kunnen hem nodig hebben en hij heeft veen veranderende argumenten in de constructor.
 

Pagina: 1 2 volgende »



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.