OOP vraagjes

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C# .NET Software Ontwikkelaar

Functie omschrijving C# .NET Developer gezocht. Ben jij een full stack developer die op zoek is naar een nieuwe uitdaging binnen een leuk snel groeiend bedrijf? Lees dan snel verder! Wij zijn op zoek naar een Developer met ervaring op het gebied van .NET die een organisatie in de regio Arnhem gaat versterken. Jij gaat je binnen dit bedrijf vooral bezighouden met het verbeteren van de functionaliteiten van hun dataplatform. Samen met andere ontwikkelaars denk je mee in oplossingsrichtingen, architectuur en nieuwe technologieën. Als C# .NET Developer binnen dit bedrijf houd je je niet alleen bezig met het verbeteren van

Bekijk vacature »

Anaplan Developer

Dit ga je doen What are you going to do: Picking up Stories: Design planning had, how are we going to build it in Anaplan; Talking to the end user to build a forecasting model; Having contact with the data team about which data is needed; Being able to convert an Excel sheet into a 3, 4 or 5 dimensional modeling environment; Giving knowledge sessions about Anaplan; Solving incidents; Making instructional videos on how teams should read forecasts; Writing blogs about forecasting. Hier ga je werken We are looking for an Anaplan Builder to deliver end-to-end solutions within a big

Bekijk vacature »

SQL ontwikkelaar

Functieomschrijving Voor een gave werkgever in regio Breda zijn wij per direct op zoek naar een SQL ontwikkelaar/ functioneel consultant. 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 als volgt uit te zien: Je test de ontwikkelde oplossingen om er zeker van te zijn dat deze voldoen aan de functionele specificaties en de behoeften van de organisatie; Je ontwerpt, ontwikkelt en implementeert SQL-databases om de data behoeften van de organisatie te ondersteunen; Je stelt op

Bekijk vacature »

Software Developer Java

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

Full stack developer

Wat ga je doen als Full stack .NET developer Microsoft 365? Je stelt je op als sparringpartner voor het team en PO over toekomstige functionaliteiten, architectuur en mogelijke nieuwe producten. Je bent mede-verantwoordelijk voor het vertalen en omzetten van een user story in een passend technisch design. Je implementeert functionaliteiten op basis van een technisch design en user story. Je bent mede-verantwoordelijk voor het beheer van Azure DevOps, waaronder het beheer van GIT, Build Pipelines, Release Pipelines en geautomatiseerde testen. Hier herken jij jezelf in Hbo werk- en denkniveau of hoger aangevuld met relevante certificeringen en/of cursussen; Minimaal 3 jaar

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

Bekijk vacature »

Oracle APEX developer

Wat je gaat doen: Als Oracle APEX ontwikkelaar bij DPA werk je samen met collega’s aan de meest interessante opdrachten. Je zult je ervaring met SQL, PL/SQL, JavaScript, HTML en CSS inzetten om wensen van opdrachtgevers te vertalen naar technische oplossingen. Je werk is heel afwisselend, omdat DPA zich niet beperkt tot een specifieke branche. Zo ben je de ene keer bezig binnen de zorgsector, de andere keer is dit bij de overheid. Wat we vragen: Klinkt goed? Voor deze functie breng je het volgende mee: Je hebt een hbo- of universitaire opleiding afgerond Je hebt 2 tot 5 jaar

Bekijk vacature »

Senior Software Developer C++

Vacature details Vakgebied: Software/IT Opleiding: Senior Vacature ID: 13342 Introductie Do you want to work for one of the most innovative companies located in the region of Eindhoven. Currently Due to growth we are looking for a Senior Software Developer. Our client is a high-tech company with international roots and can provide you with a challenging opportunity. Functieomschrijving Responsibilities: Design, develop, and maintain high-quality software applications in C++ Collaborate with other engineers, product managers, and stakeholders to understand requirements and develop solutions Write clean, maintainable, and efficient code Conduct thorough testing and debugging to ensure high-quality software Optimize applications for

Bekijk vacature »

(Junior) PHP Ontwikkelaar bij een retail bedrijf i

Bedrijfsomschrijving Ben jij een ervaren PHP ontwikkelaar met een passie voor retail en ICT? Wil jij werken in een team dat zich bezighoudt met het ontwikkelen van uitdagende applicaties voor een groot retailbedrijf in Delft? Dan zijn zij op zoek naar jou! Functieomschrijving Als PHP Ontwikkelaar werk je in een team aan de ontwikkeling van applicaties die door de gehele organisatie worden gebruikt. Je bent verantwoordelijk voor het ontwikkelen, testen en implementeren van deze applicaties. Je werkt hierbij nauw samen met andere ontwikkelaars, projectmanagers en stakeholders binnen de organisatie. Je taken bestaan onder andere uit: Ontwikkelen van nieuwe functionaliteiten en

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

C# ontwikkelaar

Functie omschrijving Werk jij graag met C# en het .NET framework in een leuk familiebedrijf? Lees dan snel verder! Jouw takenpakket hierbij is: Je gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Je gaat werken in een Microsoft omgeving (ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Daarnaast optimaliseer je de bestaande software. Bedrijfsprofiel Deze organisatie is gevestigd in de omgeving van Best en is een echt familiebedrijf. Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met

Bekijk vacature »

Full stack Python developer

Functie Samen met andere collega’s (een product owner, een software manager en een ervaren ontwikkelaar) ga jij onze producten verder ontwikkelen. Jouw verantwoordelijkheden zullen bestaan uit: – Verder wil gaan met de ontwikkeling van onze bestaande producten; nieuwe features! – Meedenkt over de roadmap van onze producten – Als sparringpartner kan optreden op het gebied van development – Zelf ook nieuwe ideeën op tafel durft te leggen en deze van scratch af aan wilt bouwen Hieronder ook een paar voorbeelden van projecten waar we momenteel mee bezig zijn of binnenkort aan willen beginnen: – Real-time interactie creëren in onze web

Bekijk vacature »

PHP Back-end Developer

Vacature details Vakgebied: Software/IT Opleiding: Starter Werklocatie: Nijmegen Vacature ID: 13633 Introductie OUr client develop websites, webshops, and digital environments that are used by many visitors daily. They are seeking an experienced PHP-Developer Back-end to join the team. If you're looking for a position where you can tackle challenging, innovative, and multidisciplinary ICT projects and make a difference, this vacancy might be for you! Functieomschrijving As a PHP developer, you'll develop websites and digital environments used by many visitors daily. You'll work as a back-end developer and want to continuously develop in this field. You can work independently and efficiently,

Bekijk vacature »

Lead developer

Functie Als Lead developer wordt jij onderdeel van een multidisciplinair team van circa 23 software engineers. Als team werken jullie agile en zijn termen als Continuous Integration en Continuous Delivery dagelijkse koek. Jullie werken aan uitdagende en afwisselende projecten met als doel klanten een totaal oplossing aan te kunnen bieden. Jij wordt verantwoordelijk voor complete projecten waarbij jij als verantwoordelijke zorgt dat het project op de juiste manier blijft draaien. Zo haal jij ook de requirements op bij de klant en kijk jij samen met het team en met de salesafdeling hoeveel uren hiervoor nodig zijn. Daarnaast stuur jij jouw

Bekijk vacature »

C++ Developer

Functieomschrijving Ben jij als software engineer toe aan een nieuwe uitdaging? Dan zijn wij op zoek naar jou! Voor het maken van de procesbesturingsoftware gebruiken onze projectteams een in C++ en C# geschreven tool. Dit is een gedistribueerd object framework wat alle kernfuncties biedt voor een procesautomatisering. Verder zullen jouw werkzaamheden o.a. bestaan uit: Analyseren van vragen en wensen van gebruikers en deze vertalen naar een functioneel ontwerp; Ontwerpen, programmeren en testen van productaanpassingen; Implementeren van nieuwe productreleases in de projectteams; Continu toetsen van het effect van nieuwe releases op andere tools en processen; Inzichtelijk maken van voortgang omtrent softwarewerkzaamheden,

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

27/11/2024 21:47:33
 
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.