dependency injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

PHP Developer gezocht!

Functie omschrijving Wij zijn op zoek naar een PHP Developer! Ben jij op zoek naar een nieuwe uitdaging? Lees dan snel verder! Voor een organisatie in de regio Utrecht die zich bezighoud met het verbeteren van de medicatieveiligheid zoeken wij een Software Developer. In deze functie zijn wij op zoek naar een slimme en enthousiaste Developer die interesse heeft in farmacie, logistiek en ICT. Daarnaast beschik je over een goed analytisch vermogen en ben je van nature gestructureerd en resultaatgericht. Je moet in deze functie daadkrachtig, flexibel en communicatief goed zijn. Je verantwoordelijkheden bestaan uit: Object georiënteerd programmeren; Werken in

Bekijk vacature »

Low Code Ontwikkelaar

In het kort Als Low Code Developer werk je aan projecten bij en voor onze klanten, waarbij je voor het ontwikkelen van de oplossingen een technisch low-code platform gebruikt. Samen met het team streef je naar de beste oplossing en bepalen jullie de juiste aanpak. Je rol is divers en je bent van begin tot eind betrokken bij de ontwikkeling zowel de back-end en de front-end van de applicatie. Naast de ontwikkeling en oplevering, breng je ook advies uit aan de klant waarom bepaalde keuzes worden gemaakt. Je bent dan ook communicatief sterk en kunt je keuzes goed (inhoudelijk) onderbouwen.

Bekijk vacature »

Medior .NET Ontwikkelaar

In het kort Als .NET ontwikkelaar ga je binnen onze business unit Transport en Logistiek aan de slag complexe maatwerk software voor bedrijf kritische systemen binnen de technische automatisering. Denk bijvoorbeeld een IoT-oplossing voor de logistieke sector waarbij we van ruim 200.000 machines de telemetrie en events verwerken. We zijn actief in de distributielogistiek, havenlogistiek en productielogistiek. Naast C# en .NET Core maken we ook gebruik van Azure technologie. En als trotse Microsoft Gold Partner leren we graag van en met jou. Wil jij jezelf blijven ontwikkelen binnen de technische automatisering met .NET, dan gaan we deze uitdaging graag met

Bekijk vacature »

Full stack .NET developer Microsoft 365

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 »

Junior .NET developer

Functie Om half 9 kom jij binnen en pak jij als eerst natuurlijk een bakje koffie of thee. Vervolgens ga jij je voorbereiden op de stand-up van kwart voor 9. Zijn er bijvoorbeeld dingen waar jij nog tegen aan loopt? Of is er nog code die getest of gereviewd moet worden? Vervolgens starten jullie met de stand up en na de stand up zoeken jullie elkaar op en gaan jullie aan de slag. Als team met 6 developers werken jullie in drie wekelijkse sprints. Het einde van een sprint is altijd op een donderdag zodat jullie op vrijdag de demo

Bekijk vacature »

C# Developer Research and Development - Delft

Vacature details Vakgebied: Software/IT Opleiding: Medior Werklocatie: Delft Vacature ID: 6307 Introductie C# Developer Research and Development - Delft - Onze klant is één van de meest innovatieve bedrijven in de region van Delft. Op dit moment zijn ze voor het innovatie centrum. In het innovatie centrum wordt gewerkt aan de nieuwste technieken voor navigatie software. R&D / C# / Pattern Recognition / Algorithms / 3d Data / DotNET Functieomschrijving Als C# Developer kom je te werken in een innovatief scrumteam. We ontwikkelen en door ontwikkelen de nieuwste technieken op het gebied van navigatie software. Deze software wordt onder andere

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 »

PHP Web Developer

Functie omschrijving Voor een klein softwarebedrijf in de omgeving Roosendaal, zijn wij op zoek naar een PHP web developer met een aantal jaar werkervaring. Wil jij graag werken aan in-house software projecten voor diverse klanten? Voel jij je prettige in een klein team developers, waar jouw inbreng enorm gewaardeerd wordt? Lees dan snel verder! Jouw werkzaamheden zien er als volgt uit: Je wordt verantwoordelijk voor de ontwikkeling van diverse applicaties. Dit kan de ene keer een online platform voor aanbiedingen zijn, en de andere keer een software pakket dat gebruikt wordt om interne processen te automatiseren. Het zijn stuk voor

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 »

E-Identity Developer met Projectleider Kwaliteiten

Functieomschrijving Voor de kamer van koophandel zijn we op zoek naar een E-Identity developer met projectleider kwaliteiten. Voor deze opdracht zoekt KVK een Informatieanalist met Technisch Projectleider en ICT developer kwaliteiten, met kennis van E-identity. We zoeken in de breedte en niet specifiek in de diepte qua skillset. Een Junior Projectmanager, een Junior Informatieanalist, een Junior Developer (full stack), een Junior Designer en een Junior ICT architect ineen, met een sterk gevoel van stakeholder management en planning vaardigheden. Door de internationale setting, én de realisatie van ontsluiting van en naar basisregisters toe zijn wij op zoek naar enige ervaring binnen

Bekijk vacature »

OutSystems developer

Dit ga je doen Klanten adviseren over de mogelijkheden van OutSystems; OutSystems oplossingen ontwikkelen en implementeren; Stakeholdermanagement; Kennis en expertise up to date houden en delen met het team. Hier ga je werken Onze opdrachtgever, gevestigd in regio Amsterdam, is een innovatieve dienstverlener die zich richt op grote corporates in verschillende sectoren. Doordat je bij veel verschillende klanten aan de slag zal gaan is geen enkel project hetzelfde. De organisatie kenmerkt zich door hoge mate van professionaliteit en innovatieve oplossingen. In de rol van OutSystems developer zal jij verschillende grote klanten helpen om efficiënte OutSystems oplossingen te ontwikkelen en implementeren.

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 »

Front-end Developer vue.js node.js SaaS

Dit ga je doen Het ontwikkelen van nieuwe features die bijdragen aan de groei van de klanten van de organisatie; Je denkt mee over nieuwe innovaties, features en verbeteringen in de applicatiearchitectuur; Je draagt bij aan de continue ontwikkeling van jouw team doordat je elke dag streeft naar het verbeteren van jouw eigen prestaties; Je neemt actief deel aan Scrum meetings en de Frontend Guild. Hier ga je werken Voor een snel groeiend bedrijf de regio Nieuw Vennep zijn wij opzoek naar een ervaren Front-end Developer. De organisatie is actief in de e-commercebranche en ontzorgt haar klanten middels een SaaS-platform.

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 »

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 »

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

27/05/2024 14:51:03
 
- 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.