dependency injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

SQL database ontwikkelaar

Functie omschrijving Ben jij niet bang voor complexe algoritmes? Schikt het schrijven van procedures in T-SQL jouw niet af en heb jij al de nodige informatie in SQL, dan is functie precies wat voor jou! Jouw werkzaamheden gaan er als volgt uit zien: Je gaat werken aan de complexere projecten waar jij van A tot Z bij betrokken bent. Je gaat zorg dragen voor het ontwerp, de ontwikkeling en het updaten van SQL databases. Dit doe je op basis van T-SQL. Jij bent van start tot finish betrokken bij de projecten die jij leidt. Je houdt contact met klanten en

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 »

PHP Developer Symfony

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail. Hier ga je werken Als PHP Developer kom je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development teams welke ieder verantwoordelijk zijn voor hun 'eigen' klanten. Jouw team bestaat uit 6 backend

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 »

.NET Developer

Functie omschrijving Jij gaat in de functie van Software Developer werken met C# en .NET framework. Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. 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. Bedrijfsprofiel Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met back-end development. Verder staat dit

Bekijk vacature »

C# Developer

Functie omschrijving Voor een softwarebedrijf in de omgeving van Veghel zijn we op zoek naar een C# developer. Word jij blij van ontwikkelen in C# en .NET? Lees dan snel verder! Jouw werkzaamheden zullen er als volgt uit gaan zien: Door middel van ASP.NET, MVC Framework en C# ga je webshops, websites en webapplicaties ontwikkelen. Je zorgt voor de optimalisatie van bestaande software en de automatisering van bedrijfsprocessen. Op basis van de wensen van de klant ga je samen met je collega's ga je op zoek naar de juiste oplossingen en je gaat dit uitwerken tot een mooi eindproduct. Bedrijfsprofiel

Bekijk vacature »

Backend developer

Functie omschrijving Ben jij graag bezig met de back-end van applicaties? Zou je dit graag willen doen voor een kleine werkgever waar ook tijd is voor een drankje op zijn tijd? Je taken hierbij zullen bestaan uit: Gebruik maken van de volgende technieken: .NET (core), C#, SQL, XML, MVC, JSON, REST & SOAP API. Gebruik maken van de volgende tools: Visual Studio, GIT, Jira, Jenkins. Bovengenoemde technieken en tools ga je gebruiken om: Nieuwe functionaliteiten te ontwikkelen. Wijzigingsverzoeken van klanten uitvoeren. Verzorgen van koppelingen tussen data. Bedrijfsprofiel Jouw nieuwe werkgever bevindt zich in regio Raamdonksveer en bieden oplossingen op gebied

Bekijk vacature »

Dynamics Ontwikkelaar

Dit ga je doen Ontwikkelen van Dynamics 365 voor de interne uitrol; Samen met de consultants sparren met klanten over de wensen en eisen; Ontwikkelen van Dynamics 365 voor verschillende grote klanten; Technische analyse en testen; Meedenken over het gebruik en de richting van Dynamics binnen de organisatie. Hier ga je werken Onze opdrachtgever, gevestigd in regio Eindhoven, levert een compleet dienstenpakket op het gebied van IT. Zij pakken verschillende (complexe) vraagstukken van grote organisaties op. De sfeer intern is gezellig en informeel. Men houdt van hard werken maar gezelligheid door middel van een borrel of gezamenlijke lunch komt er

Bekijk vacature »

PHP Developer

Functie omschrijving Voor een bedrijf in Den Bosch zoek ik een PHP Developer, die al wat werkervaring heeft. Jij gaat aan de slag met de verdere professionalisering van de interne applicaties en software. In de functie ga je verder: Verdere ontwikkeling eigen CRM systeem, vooral middels PHP; Bouwen van verschillende API's & koppelingen; Meedenken om de software/applicaties te verbeteren/optimaliseren; Aan de slag met de interne tooling. Bedrijfsprofiel Dit bedrijf is actief binnen de telecombranche. Het hoofdkantoor zit in regio van Den Bosch en er werken ruim 70 medewerkers, verdeeld over verschillende afdelingen. De afdeling Development bestaat uit vijf collega's, onder

Bekijk vacature »

Java Ontwikkelaar

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 »

.NET Developer

Functieomschrijving Ben jij klaar voor de volgende stap in jouw carrière? Kom werken bij dit kleine softwarebureau en werk aan de gaafste maatwerk projecten. Je komt te werken in een klein development team en werk nauw samen met elkaar, om maatwerk software te leveren en bij te dragen aan bedrijfsautomatiseringen. Je gaat werken met de Microsoft stack en technieken als .NET, C#, Entity, MVC, SQL server. In de functie krijg je veel vrijheid om zelf beslissingen te nemen en je hebt impact op de bedrijfsprocessen. Bedrijfsprofiel Dit familiebedrijf bestaat al ruim 20 jaar. Zij hebben een vast netwerk van klanten,

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 »

Java Developer (Training And Simulation)

Wat jij doet Je zou onze Java Developer zijn en nauw samenwerken met je Product Owner, Software System Engineer, Scrum Master en andere Developers. Samen draag je bij aan een multidisciplinair en zelf organiserend Agile team. De rol is zeer afwisselend en bestaat uit, maar is zeker niet beperkt tot: de-risk en prototype onbewezen simulatietechnologieën; simulatiekaders ontwikkelen voor gebruik door andere teams; je bent goed in het begrijpen van ingewikkelde ideeën; heeft de mogelijkheid om nauw samen te werken met grote internationale klanten, leveranciers en overheden om onze oplossingen, vastleggingsvereisten, enz. te definiëren en te presenteren. Ben jij het? Wij

Bekijk vacature »

Junior Software developer

Functie Als junior .NET ontwikkelaar start jij in een compact team met drie ervaren .NET ontwikkelaars. Wij werken op projectbasis en begeleiden zelf het hele traject van A tot Z. Wij bieden jou dan ook een brede functie aan met veel technische uitdaging! Ons traject ziet er als volgt uit: 1) Wij analyseren de behoefte van onze klant 2) Wij werken de behoefte uit en vertalen dit naar technische werkzaamheden en maken een uren/kosten schatting; 3) Wij gaan aan de slag met het ontwikkelen van het product met directe feedback van de klant, zodat datgene gerealiseerd wordt, wat gewenst is;

Bekijk vacature »

Senior Lead Front End Developer

Functieomschrijving Voor Stichting Waternet zijn wij op zoek naar een senior Lead Front End Developer. Binnen het DevOps team Online zijn we op zoek naar een Senior Lead Front End developer met kennis van toegankelijkheid. Deze developer zal zich bezighouden met development van webpaginas die in verbinding staan met systemen uit het back office. Taken Ontwerpen, ontwikkelen, implementeren, documenteren en beheren van webapplicaties in een Azure-omgeving Debuggen, analyseren en oplossen van problemen in de OTAPomgevingen Je participeert in het DevOpsTeam Online voor het verder uitwerken en implementeren van gebruikerswensen Je bent betrokken bij toegankelijkheid audits en het implementeren van WCAG

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

05/05/2024 14:11:24
 
- 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.