dependency injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack Developer

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; Verantwoordelijk voor de front-end werkzaamheden; Naast de front-end werk je ook aan de backend. Hier ga je werken Als Full Stack Developer komt 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

Bekijk vacature »

Fullstack Developer TOTO

Do you want to work with the latest technologies on the development of new systems and applications? Get moving and strengthen Nederlandse Loterij as a Fullstack Developer TOTO. Thanks to your efforts, complex business critical applications are always running smoothly. In this way, you directly contribute to a happy, healthy and sporty Netherlands. As a Fullstack Developer you score by: Taking ownership of the development cycle of an application in a large scale, high availability, geo redundant landscape Coaching your peer developers and safeguarding code quality Integrating the application with other components of the system using the available API’s Managing

Bekijk vacature »

PHP Developer

Functie omschrijving Als PHP / Laravel developer zal je in een klein team terecht komen. Wij zijn op zoek naar een echte specialist, iemand die de balans weet te vinden tussen techniek en perfectie. In de aankomende jaren wilt dit bedrijf flink groeien en daarom zijn ze op zoek naar jou! Wat ga je doen? Je draagt bij aan het ontwikkelen en onderhouden van bestaande webapplicaties die boordevol functionaliteit zitten. Deze applicaties worden gebruikt door de organisatie zelf en ook door de klanten. Inmiddels wordt er gewerkt met Laravel 8 en zijn er diverse koppelingen naar externe leveranciers. Verder zal

Bekijk vacature »

Junior PHP Developer

Je maakt een vliegende start van je carrière, door meteen mee te bouwen aan de digitale aspecten van Coolblue. Wat doe je als Junior PHP Developer bij Coolblue? Als Junior PHP Developer ben je meteen vanaf de start onderdeel van een development team. Je kijkt veel mee met collega’s en volgt trainingen om te groeien als Junior Developer. Op dat moment komt je wil om steeds te blijven leren naar boven. Daarnaast pak je in de sprints ook je eigen stories op om Coolblue iedere dag een beetje beter te kunnen maken. Je sterk analytisch vermogen komt dan ook goed

Bekijk vacature »

Software Ontwikkelaar PHP

Functie omschrijving Software Ontwikkelaar PHP gezocht! Wij zijn op zoek naar een ervaren PHP Software Ontwikkelaar om het team van onze opdrachtgever te versterken! De ideale kandidaat zal fungeren als verlengstuk van klanten en complexe technische vraagstukken met enthousiasme benaderen. Naast het werken met de nieuwste technologieën, ben je in staat om aan meerdere projecten tegelijkertijd te werken. Als je deze uitdaging aangaat, werk je nauw samen met front-end developers en draag je bij aan het realiseren van grote veranderingen bij klanten. Het bedrijf zoekt iemand die zichzelf graag uitdaagt en altijd streeft naar het leveren van de beste resultaten.

Bekijk vacature »

Medior Front-end Developer

Bij Getnoticed doen wij wat we leuk vinden, websites bouwen en online marketing. Voor veel van onze klanten doen we dan ook allebei. Wel zo fijn om campagnes te draaien voor conversiegerichte websites die in eigen beheer zijn. In onze vestiging in Nederweert zit onze development afdeling en worden de websites gebouwd. Op dit moment zijn we op zoek naar jou: dé Medior Front-end Developer die net als wij, het hoofd boven het maaiveld durft uit te steken! In het kort Even een paar punten die omschrijven wat deze toffe baan inhoudt: Het uitwerken van designs tot functionele layouts Je

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 »

PHP Developer

Functieomschrijving Vanuit het hoofdkantoor in de regio van Bergen op Zoom ben je als PHP Developer niet alleen gefocust op het ontwikkelen van Software. Daarnaast ben je ook voortdurend bezig met het zoeken naar nieuwe mogelijkheden en innovaties die essentieel kunnen zijn voor de efficiëntie van software ontwikkeling. Je deelt veel kennis en informatie met het team en ontvangt deze dan ook graag terug. Techstack: PHP, Symfony & mySQL. Bedrijfsprofiel Deze uitdagende opdrachtgever is ruim 20 jaar actief in de regio Bergen op Zoom. Het vooruitstrevende team staat de hele dag voor je klaar om je te helpen en ondersteunen.

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 »

Product Developer (M/F), Fulltime 40 h/week

A global Plantbased revolution – that is our dream. Maximising the protein transition – that is our mission. Producing and developing sustainable and delicious products – that is what we do. Ojah is a fast growing company with a mission and has the ambition to be the world leader in its field. To support this growth we are hiring new colleagues. People that would like to make a difference and dare to dream big. With currently a 150 colleagues proudly working on our exceptional products. Working in a dynamic surrounding that runs full speed ahead. We need you! Product Developer

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 »

.NET software developer

Functie omschrijving Voor een gewilde werkgever in omgeving Roosendaal zijn wij op zoek naar een back-end software developer met een aantal jaar werkervaring. Je krijgt een plekje in het workflow team en je zal betrokken worden bij het bouwen van nieuwe software, en het optimaliseren van bestaande code. Je werkt bij dit bedrijf in een Scrum team waarin je soms klantcontact hebt. Jouw werkzaamheden zullen er als volgt uit zien: Je krijgt een plekje op de in-house IT afdeling. Deze afdeling bestaat uit zo'n 12 collega's, verdeeld over verschillende specialisaties (BI, Beheer, Business software & workflow). De vacature staat open

Bekijk vacature »

Front End Developer React Vue

Dit ga je doen Meewerken aan de implementaties en ontwikkeling van nieuwe functionaliteiten van de webapplicaties; Ontwikkelen met o.a. React en Vue en HTML/CSS, ook krijg je in verband met de samenwerking ook affiniteit met de backend Ruby on Rails; Ontwikkeling aan de front end voor de koppelingen tussen de diverse systemen; Ontwerpen van interfaces en een bijdrage leveren aan de gebruikerservaring; Zorgdragen voor hoge kwaliteit van code en jezelf (en anderen) blijven verbeteren; Als Senior Front End Developer begeleid je zelf ook FE-development projecten, hierin leid je de projecten en pak jij het initiatief op (bv integratieprojecten). Hier ga

Bekijk vacature »

Senior Fullstack developer wanted! (C#, Java, Angu

Functie Under the guidance of 3 account managers, one of whom will be your point of contact within your expertise, you will start working for various clients. He or she will help you find a suitable and challenging assignment. Naturally, they will take your situation, experience and (technical) ambitions into account. The assignments last one to two years on average. This allows you to really commit to a project and make an impact as a consultant. Besides the assignment, you will regularly meet your colleagues from the IT department to share knowledge or discuss new trends, for example. Master classes

Bekijk vacature »

Leidinggevend Full Stack Developer

Hé jij, nieuwe Pinkcuber! Ga aan de slag bij Pinkcube, online leverancier van promotieartikelen! Een innovatieve organisatie waar extra stappen zetten voor klanten de normaalste zaak van de wereld is. Ambitieus zijn we ook. ‘Naoberschap’ staat bij Pinkcube hoog in het vaandel; we helpen elkaar en iedereen is welkom. Pinkcube is Great Place to Work Certified, erkend leerbedrijf, maatschappelijk betrokken partner van stichting Present en partner van CliniClowns. En misschien wel jouw nieuwe werkgever. Wij zoeken namelijk een enthousiaste: Leidinggevend Full Stack Developer (40 uur, medior/senior) Ben jij klaar om baanbrekende ideeën tot leven te brengen en deel uit te

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

25/04/2024 18:55:42
 
- 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.