dependency injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

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 »

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 »

Back-end PHP Software Developer - Juniorfunctie

Functieomschrijving Wij zijn op zoek naar een PHP Software Developer om ons team te versterken en mee te werken aan de ontwikkeling van eigen IOT-oplossingen. In deze functie ben je verantwoordelijk voor het bouwen van webapplicaties, apps en dashboards voor het uitlezen en managen van sensoren in machines. Je werkt nauw samen met een team van ontwikkelaars en engineers om de beste software-oplossingen te creëren. Jouw werkzaamheden zien er als volgt uit: Je bent in deze rol verantwoordelijk voor het ontwerpen, ontwikkelen en onderhouden van webapplicaties en softwaretoepassingen voor in-house ontwikkelde IOT oplossingen. Je werkt aan complexe databases en back-end

Bekijk vacature »

Grafisch vormgever

Standplaats: Maasland Aantal uren: 32 – 40 uur per week Opleidingsniveau: HBO werk- en denkniveau Ben jij een ambitieuze grafisch vormgever met een passie voor creativiteit en oog voor detail? Vind jij het daarnaast leuk om ook marketingactiviteiten op te pakken? Dan zijn wij op zoek naar jou! Bedrijfsinformatie Westacc Group BV is het zusterbedrijf van HABA en specialiseert zich in (maatwerk) oplossingen voor (elektro) techniek en verlichting in de kampeerbranche. Zij produceren en assembleren onderdelen voor caravans, campers en boten. Voor een groot aantal caravan- en campermerken leveren wij producten als zekeringkasten, invoerdozen, acculaders, schakelmateriaal en verlichting. De producten

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 »

Frontend Developer

Functieomschrijving Voor de NIPV zijn wij opzoek naar een Frontend Developer. Als Frontend Developer ga jij aan de slag om dashboards te bouwen vanuit het datawarehouse. Dit stelt NIPV in staat om snel en eenvoudig bij correcte bedrijfsvoeringsinformatie te kunnen. Je ontwikkelt dashboards in PowerBI, publiceert en onderhoud die, verzameld en verwerkt feedback in overleg met het ontwikkelteam. Naast dashboards ontwikkel en onderhoud je een datamodel in Excel waarmee adviseurs, controllers en analisten in staat worden gesteld om de gegevens uit de dashboards te raadplegen en anders te filteren of bepaalde gegevens nader te verfijnen, zodat verdiepende vragen kunnen worden

Bekijk vacature »

Database Developer

Functieomschrijving Wat ga je doen? 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 voeren, maar het is ook prettig als je in de omgeving van Tilburg woont om naar het kantoor te kunnen komen. Vind jij het leuk om jouw creatieve vaardigheden te benutten om complexe systemen te ontwikkelen? Lees dan snel verder! Bedrijfsprofiel Voor wie

Bekijk vacature »

Back end developer PHP

Functie Met een complex en uitgebreid e-commerce platform, een eigen PIM-systeem en eigen scan applicatie – krijg jij dagelijks te zien hoe jouw werk gebruikt wordt door miljoenen gebruikers. En we staan qua development pas in de startblokken, aangezien er nog meerdere projecten op de plank liggen te wachten! Ons huidige development team bestaat uit 8 programmeurs. Er wordt dagelijks gereflecteerd op geschreven code, Scrum taken en kennisdelen onderling is een must. Onze voertaal binnen ons team is Engels, dit omdat wij twee internationale collega’s hebben. Ons huidige “IT Landschap” bestaat voornamelijk uit allerlei losse onderdelen die individueel, maar ook

Bekijk vacature »

PHP Developer (junior functie)

Functie omschrijving Ben jij een starter en wil je werken bij een jong en leuk bedrijf? Lees dan verder! Wij zijn op zoek naar een PHP Developer binnen een junior functie. Binnen dit bedrijf gaat het om persoonlijke aandacht en ontwikkeling! Je komt te werken voor een leuk communicatiebureau die alles op het gebied van online en offline communicatie doet. Dit doen zij voor verschillende branches, waardoor je aan diverse soorten projecten mag werken, dit maakt deze baan erg leuk! Daarbij werk je aan een door hun zelf ontwikkeld framework welke goed leesbaar is. Je maakt voor bedrijven op maat

Bekijk vacature »

Developer Full Stack

Functie omschrijving Developer gezocht! Ben jij een enthousiaste developer die graag wil bijdragen aan ontwikkelingen binnen een mooie organisatie? Solliciteer dan snel. Wij zijn op zoek naar een Full Stack Developer uit de regio Nijkerk die gaat bijdragen aan het door ontwikkelen, onderhouden en optimaliseren van een SaaS applicatie. Je moet beschikken over beheersing van zowel de Nederlandse als Engelse taal aangezien je samen met de klant gaat werken. Bedrijfsprofiel Je komt te werken binnen een echt familiebedrijf dat al sinds 1925 actief is binnen de FMCG branche. Het bedrijf heeft 40 medewerkers en er heerst een platte communicatiestructuur waarbij

Bekijk vacature »

Junior Java Developer

Dit ga je doen Full stack web- en appdevelopment; Vertalen van de functionele wensen naar de technische specificaties; Sturing geven aan/klank board zijn voor de software teams; Trainen van de software teams; Sparren met klanten; Meedenken over architectuur. Hier ga je werken De organisatie is een bureau welke websites en mobiele applicaties bouwt voor verschillende toonaangevende organisaties. Hierbij richten zij zich voornamelijk op de sectoren leisure, overheid en zorg. De sfeer intern kenmerkt zich door informaliteit, gezelligheid en ambitie. Ze werken dag in dag uit samen om mooie producten op te leveren voor hun klanten. Op dit moment zijn er

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 »

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 »

Senior Front-end developer Consultancy

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 »

Fullstack developer - medior

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en zou jij graag bij een platte maar informele organisatie willen werken? Voor een mooi softwarebedrijf in omgeving Dordrecht zijn wij op zoek naar versterking voor op de afdeling Software Development! Als Fullstack developer wordt je bij dit bedrijf onderdeel van de volledige ontwikkeling van requirement tot oplevering! Werkzaamheden Jouw focus ligt op de front end en alles wat daarbij komt kijken. Je gaat ontwerpen, ontwikkelen, testen en valideren. Je zult voornamelijk werken met React.js en Typescript. Maar ook Javascript, HTML en CSS komen aanbod. Daarnaast zal je ook regelmatig met

Bekijk vacature »

Pagina: 1 2 volgende »

Ozzie PHP

Ozzie PHP

04/02/2013 16:03:27
Quote Anchor link
Jaja, ik probeer dan toch dependency injection te implementeren in m'n framework, maar nu zit ik al gelijk met het volgende probleem / uitdaging. Ik heb een YAML configbestand gemaakt met daarin een paar paden (nog lang niet compleet, maar we moeten ergens beginnen nietwaar). Deze paden zijn nog niet compleet, want ze moeten worden geprefixt met "home/xxx/private/". Deze prefix genereer ik dynamisch bij iedere pagina-aanroep (op basis van $_SERVER['DOCUMENT_ROOT']). Een pad bestaat dus uit een prefix + het gedeelte wat in het configbestand staat. Een pad naar de library is bijvoorbeeld "/home/xxx/private/pad/naar/library/" waarbij de prefix rood is gemaakt.

De inhoud van het YAML configbestand ziet er als volgt uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
parameters:
    paths:
        private:
            library: pad/naar/library/
            modules: pad/naar/modules/


Normaal gesproken (lees: tot een paar weken geleden) zou ik het configbestand vanuit de Container class inlezen en op deze manier de parameters in de Container class instellen. Echter, ik heb hier op het forum geleerd dat ik nu juist een aparte class moet maken die de parameters inlaadt in de Container class (de OOP manier). Dat heb ik dan ook gedaan. De parameters worden nu via een Container_Loader class ingeladen in de Container class. Tot zover gaat het nog allemaal perfect. De parameters met de paden staan nu in de Container class! (De prefix ontbreekt echter nog...)

Nu komt echter het moeilijke deel: ik wil nu eigenlijk een service "paths" gaan instellen, die als ik 'm aanroep een paths object teruggeeft waarvan de properties de volledige (geprefixte) paden zijn.

Uiteindelijk is het de de bedoeling dat ik een (library) pad als volgt kan aanroepen:

echo $this->getContainer()->getService('paths')->private->library;
// geeft als resulaat "/home/xxx/private/pad/naar/library/"

Wat ik nu zou kunnen doen is (schematisch):

- 2 classes maken, een Paths class en een Paths_Loader class
- vanuit m'n Application class (FrontController) set ik een Paths class. Deze Paths class + de parameter paden uit de Container class + de pad prefix geef ik mee aan de __construct functie van de Paths_Loader class. Deze class vult op zijn beurt de Paths class en als dat gebeurd is, stop ik de Paths class als service in de container. Je krijgt dan ongeveer zoiets als dit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
<?php
$paths
      = new Paths();
$parameters = $this->getContainer()->getParameter('paths');
$loader     = new Paths_Loader($paths, $parameters , $path_prefix);
$loader->load(); // de Paths class wordt gevuld met de juiste paden
$this->getContainer()->setService('paths', $paths); // we stellen de Paths class in als service
?>


Vraag me niet waarom... maar ik heb het idee dat er ene Wouter J over m'n schouder meekijkt en dat die zegt dat dit niet de juiste manier is! :-)

Volgens mij moet ik namelijk op de een of andere manier in het configuratiebestand een "paths" service instellen, in plaats van in mijn Application class (FrontController). Maar ik heb geen idee hoe! Vooral omdat die (dynamische) prefix nog aan de paden moet worden toegevoegd. Daarom vraag ik me af of ik überhaupt wel een Paths service via hetconfiguratiebestand kan instellen.

Maar toch heb ik het idee dat in dat configuratiebestand op de een of andere manier die service moet worden ingesteld en er een link moet worden gemaakt met de 'paths' parameters.

Maar hoe... hoe... hoe?????? Wie kan mij de juiste weg wijzen?
Gewijzigd op 04/02/2013 16:07:36 door Ozzie PHP
 
PHP hulp

PHP hulp

03/12/2024 20:30:28
 
- Raoul -

- Raoul -

04/02/2013 16:51:32
Quote Anchor link
Waarom wil je de path van een service willen ophalen???
 
Ozzie PHP

Ozzie PHP

04/02/2013 16:58:42
Quote Anchor link
Raoul, wat bedoel je? Ik wil geen path van een service ophalen. Ik wil mijn paden als een service instellen zodat ik ze overal kan gebruiken.

Of zijn paden geen service??? En zo nee, wat is dan wél een service?

Het is voor mij nog allemaal vrij nieuw dus wellicht begrijp ik het nog een beetje verkeerd.
 
Wouter J

Wouter J

04/02/2013 17:01:00
Quote Anchor link
Ozzie, je gaat nu weer de container als een dump plaats gebruiken (een registery dus) dit moet je niet doen.

Een service is een globale klasse die je in je code kunt gebruiken.
 
Ozzie PHP

Ozzie PHP

04/02/2013 17:03:27
Quote Anchor link
Wouter, goed dat je er bent :)

Kun je mij dan uitleggen wat precies een service is?

Toevoeging op 04/02/2013 17:03:58:

Laat ik het anders zeggen... waarom is een paths class geen service?
 
- Raoul -

- Raoul -

04/02/2013 17:04:41
Quote Anchor link
Een service is een item in DI die een dependency nodig heeft, of toch niet altijd. Stel je hebt de service Router, en die router heeft als dependency de ModuleManager class, dan is die Router een service.

Maaarrrr.. die ModuleManager is dan ook een service want de Router heeft de ModuleManager nodig.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php

return array(
   'module_manager' => array(
      'class' => '\\Framework\\ModuleManager\\ModuleManager',
   ),

   'router' => array(
      'class' => '\\Framework\\Routing\\Router',
      'dependencies' => array('module_manager'),
   ),
);


?>


Zo zie je dat de router de service 'module_manager' nodig heeft. Een ServiceLoader laad die services dan in in je DI container. Maar, de ServiceLoader laad ook eventuele dependencies in.

Dus, stel de ServiceLoader laad de Router in in DI, dan geeft de ServiceLoader de ModuleManager mee als constructor argument voor de router.

Ik weet niet of ik het goed heb uitgelegd want iets goed uitleggen, daar ben ik niet zo goed in :P
 
Ozzie PHP

Ozzie PHP

04/02/2013 17:12:07
Quote Anchor link
Hmmm... een bijzonder verhaal... ik ben het spoor bijster nu. Ik wacht wel even wat Wouter gaat zeggen...
 
Wouter J

Wouter J

04/02/2013 19:27:40
Quote Anchor link
Oké, ik ga je in een hele nieuwe situatie plaatsen. Hopelijk krijg je het dan wel door:

We hebben een Mailer klasse. Deze Mailer klasse stuurt, hoe kan het ook anders, mails. Om een mail te versturen hebben we een transport string nodig. In ons geval is dit 'sendmail'. Stel dat we nu ook nog een NewsLetterManager klasse hebben, deze klasse zorgt dat nieuwsbrieven verzonden worden. Deze heeft onze Mailer klasse nodig om emails te versturen. Je normale instict zou waarschijnlijk zeggen dit te doen:
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
<?php
class NewsLetterManager
{
    private $mailer;

    public function __construct(Mailer $mailer)
    {

        $this->mailer = $mailer;
    }


    // ...
}

// ergens in een controller
$mailer = new Mailer('sendmail');
$newsLetterManager = new NewsLetterManager($mailer);
$newsLetterManager->send(...);
?>

Dit ziet er wel leuk uit, maar beeld je eens in dat de de newslettermanager op meerdere plaatsen nodig hebt. Dan moet je telkens eerst een instance van Mailer aanmaken en die dan injecteren in NewsLetterManager. Allereerst kost het veel werk voordat we een nieuwsbrief kunnen versturen en als 2e hoeft de Mailer maar 1x aangemaakt te worden.

Oké, dit gaan we verbeteren. Ipv telkens een Mailer klasse aan te maken met een 'sendmail' parameter maken we nu een mailer service. De configuratie zal dan zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
services:
    mailer:
        class: Mailer
        arguments: ['sendmail']

Ziet er niet onaardig uit, we kunnen hem dan zo gebruiken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$mailer
= $this->getContainer()->get('mailer');
$newsLetterManager = new NewsLetterManager($mailer);
?>


Nu hebben we de code al iets beter, maar nog niet optimaal. Stel dat ik nu een nieuwe Mailer klasse heb geschreven, dan zal ik graag die class aan willen passen. We doen er dan goed aan die op te slaan in een parameter. Tevens kunnen we bij een ander project misschien wel de voorkeur geven aan phpmail ipv sendmail. We moeten dat dus makkelijk kunnen aanpassen => ook een parameter van maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
parameters:
    mailer.class: Mailer
    mailer.transport: sendmail

services:
    mailer:
        class: %mailer.class%
        arguments: [%mailer.transport%]

Zoals ik ooit al had uitgelegd geven we met % parameters aan.

Nu kunnen we deze configuratie veranderen door een configuratie file aan te maken in onze module en daarin een nieuwe waarde aan mailer.class of mailer.transport te geven.

Maar nu zitten we nog steeds met het probleem dat we telkens een NewsLetterManager klasse moeten maken met een mailer instance erin. We kunnen beter van onze NewsLetterManager ook een service maken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
services:
    newsletter_manager:
        class: NewsLetterManager
        arguments: [@mailer]

met @ geven we een service aan

Nu is het ook verstandig om deze klasse in een parameter te zetten, maar dat laat ik even buiten beschouwing. Als we nu een nieuwsbrief willen versturen is het enige wat we hoeven te doen deze newsletter_manager service uit de container te vissen en ->send(...) aan te roepen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
$newsletter
= $this->getContainer()->get('newsletter_manager')->send(...);
// ...
?>

Nu hebben we in onze applicatie 2 services: Mailer en NewsLetterManager.

Je hebt gelijk dat services altijd in een configuratie bestand oid moeten worden ingesteld en een container zou na het laden daarvan moeten bevriezen, je kan dan niks meer toevoegen/veranderen.
 
Ozzie PHP

Ozzie PHP

04/02/2013 20:12:52
Quote Anchor link
Hey Wouter, dit komt me bekend voor... ik kwam vanmiddag documentatie (in het Engels) van Symfony tegen waar dit ook in stond. Ik begin het al een beetje door te krijgen (joepie!) maar ik vraag me nog wel 2 dingen af:

1) Behalve een mailer... wat kunnen dan nog meer services zijn? Ik kan me voorstellen een database? Maar echt veel verder dan dat kom ik niet. Zou jij eens wat ding kunnen opsommen die een service (kunnen) zijn?

2) Als ik dit in een configuratiebestand zet

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
services:
    newsletter_manager:
        class: NewsLetterManager
        arguments: [@mailer]


Met welke code stop je deze service dan in een container (de "set" functie) en met welke code zorg je dat de service op de juiste manier wordt opgehaald/uitgevoerd (de "get" functie)?

Heb je daar wellicht een voorbeeld van? Als je dat hebt, dan kan ik weer een tijdje vooruit denk ik :)
Alvast dank!
 
Wouter J

Wouter J

04/02/2013 20:30:02
Quote Anchor link
Quote:
ik kwam vanmiddag documentatie (in het Engels) van Symfony tegen waar dit ook in stond.

Klopt, ik gebruik veel dingen uit de documentatie om OO principes uit te leggen. Dat krijg je he, als je daar ook aan mee helpt.

Quote:
1) Behalve een mailer... wat kunnen dan nog meer services zijn? Ik kan me voorstellen een database? Maar echt veel verder dan dat kom ik niet. Zou jij eens wat ding kunnen opsommen die een service (kunnen) zijn?

Nou, zo'n beetje elke klasse is een service. Als je geïnteresseerd bent, dit is de lijst van services in een test projectje van me (gemaakt met symfony): http://pastebin.com/Y3f89ve5

Quote:
Met welke code stop je deze service dan in een container (de "set" functie) en met welke code zorg je dat de service op de juiste manier wordt opgehaald/uitgevoerd (de "get" functie)?

Hiervoor heb je een service loader nodig. Deze zet de data die hij krijgt om in een factory.
 
Ozzie PHP

Ozzie PHP

04/02/2013 20:36:01
Quote Anchor link
Wouter, heb je een voorbeeld van de code van zo'n service loader?

Ik snap die lijst niet in die link... heb jij die lijst zelf gemaakt? Ik zie er zelfs een firewall tussen staan. Gebruik jij al die bestanden in een project???
 
Wouter J

Wouter J

04/02/2013 20:41:02
Quote Anchor link
Ozzie, die lijst is gewoon een dump van de container in symfony. Die lijst is opgemaakt als service_name => service_class Het was om aan te geven dat bijna alles wel een service is.

ServiceLoader zou ik dan moeten gaan schrijven, daar gaat behoorlijk wat tijd in zitten.
Gewijzigd op 04/02/2013 20:41:46 door Wouter J
 
Ozzie PHP

Ozzie PHP

04/02/2013 20:49:36
Quote Anchor link
Maar wanneer is iets nou een service...? Jij zei eerder dat een paths class geen service is (ik kan me er iets bij voorstellen) maar in jouw lijst zijn heeeel veel dingen een service. Moet een service per se dependencies hebben, of is dat geen vereiste? Ik ben dus vooral benieuwd wat nou precies een service is. Wanneer is iets een service? Waarom is een mailer of (in jouw voorbeeld) een router of een metadatafactory een service? Wat zijn de kenmerken van een service?

Bestaat er geen standaardfunctie voor zo'n service loader? Gebruik jij zo'n stuctuur zelf dan niet?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
services:
    newsletter_manager:
        class: NewsLetterManager
        arguments: [@mailer]


Ik ben al blij dat ik snap wat het bovenstaande inhoudt. Echter, als ik het niet in m'n container gestopt krijg, dan kan ik het ook niet gebruiken...
 
Wouter J

Wouter J

04/02/2013 20:59:35
Quote Anchor link
Quote:
Maar wanneer is iets nou een service...? (...) Wanneer is iets een service? (...) Wat zijn de kenmerken van een service?

Een service is een klasse die je op een andere plek gebruikt/kan gebruiken. Zodra een klasse een andere klasse injecteert of zodra een klasse geïnjecteerd kan worden is het een service.

Quote:
Bestaat er geen standaardfunctie voor zo'n service loader? Gebruik jij zo'n stuctuur zelf dan niet?

Je zou die van Symfony kunnen pakken (kijk eens naar het DependencyInjection component). Ik gebruik zo'n structuur zelf ook, als ik met symfony2 werk, maar dan doet Symfony het allemaal lekker voor me (voordeeltje van andermans framework gebruiken). En in mijn eigen projecten, zonder Symfony2, gebruik ik vaak Pimple en ServiceProvider klassen (zie bijv. deze ServiceProvider)
 
Ozzie PHP

Ozzie PHP

04/02/2013 21:15:02
Quote Anchor link
Pffff, lastig allemaal hoor... iedereen zegt dat je dependency injection moet gebruiken... maar de code om het voor elkaar te krijgen is dus behoorlijk lastig.

"Een service is een klasse die je op een andere plek gebruikt/kan gebruiken."

Dit is duidelijk.

"Zodra een klasse een andere klasse injecteert of zodra een klasse geïnjecteerd kan worden is het een service."

Maar dit niet... Bedoel je wanneer een klasse een andere klasse nodig heeft om te kunnen werken? En dat dan beiden classes een service zijn?
 
- Raoul -

- Raoul -

04/02/2013 21:40:54
Quote Anchor link
Ozzie,

Ik heb onlangs een klasse geschreven die al services en hun dependencies inlaad in de DI container.
Dankzij de tips van Wouter (thx!) is deze nu heel erg wat beter, maar je moet het niet serieus nemen.

ServiceLoader:
https://github.com/rvandenberge/Framework/blob/master/vendor/framework/lib/Framework/DependencyInjection/ServiceLoader.php

Config van de services:
https://github.com/rvandenberge/Framework/blob/master/config/services.php

Misschien dat je het door middel van die code wat beter snapt?
 
Ozzie PHP

Ozzie PHP

04/02/2013 22:29:29
Quote Anchor link
Thanks Raoul, ik blijf het gewoon lastig vinden. Dan denk ik dat ik er eindelijk uit ben, en dan toch weer niet... misschien moet ik het maar gewoon op m'n eigen manier doen... en in ieder geval even een nachtje erover slapen... zucht
 
- Raoul -

- Raoul -

04/02/2013 22:41:18
Quote Anchor link
Als je programmeert moet je het net op je eigen manier doen, dat is net het mooie aan programmeren. Maar, je moet een design pattern wel natuurlijk correct toepassen anders kan je het ook niet DI noemen.
 
Ozzie PHP

Ozzie PHP

04/02/2013 22:43:44
Quote Anchor link
Nee klopt... maar alles is een service... maar ik snap nog steeds niet goed waarom. Maar goed, ik ga maar eerst verder voorlopig, want het kost me teveel tijd nu. Thanks voor de hulp.
 
Wouter J

Wouter J

04/02/2013 22:46:59
Quote Anchor link
nu verder zonder di en later je hele framework omzetten in DI kost meer tijd dan nu uitvogelen hoe DI werkt.
 
- Raoul -

- Raoul -

04/02/2013 22:50:11
Quote Anchor link
Zodra iets eigenlijk een dependency nodig heeft (zoals de Router als dependency de ModuleManager heeft, als in m'n eerdere voorbeeld) zie ik het als een service. Een service is ook iets dat gebruikt word ALS dependency van andere services.
 

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.