Dependency Injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Node.js developer

Functie Onder begeleiding van 3 accountmanagers waarvan er 1 binnen jouw expertise je aanspreekpunt zal zijn ga je aan de slag bij diverse opdrachtgevers. Hij of zij helpt je bij het vinden van een passende en uitdagende opdracht. Hierin houden ze uiteraard rekening met jouw situatie, ervaring en (technische) ambities. De opdrachten duren gemiddeld één tot 2 jaar. Hierdoor kun je je ook echt vastbijten in een project en als consultant impact maken. Naast de opdracht ben je regelmatig met je collega’s van de IT-afdeling om bijvoorbeeld onderlinge kennis te delen, of nieuwe trends te bespreken. Ook worden er regelmatig

Bekijk vacature »

Software Developer

Functie omschrijving Heb jij affiniteit met ICT en een WO diploma in de pocket? Dan ben je hier aan het juiste adres. Voor een opdrachtgever in Amsterdam zijn wij op zoek naar kandidaten die (enige) ervaring hebben met Java, Javascript, C of C++. Je zal door middel van trainingen worden opgeleid tot een volwaardige Software Developer. Er wordt tijdens de training natuurlijk veel aandacht besteedt aan de vaktechnische aspecten, maar er gaat ook veel aandacht uit naar jouw persoonlijke ontwikkeling. Bedrijfsprofiel Bij deze opdrachtgever in de omgeving van Amsterdam zoeken ze meerdere enthousiaste kandidaten die hun carrière willen starten met

Bekijk vacature »

Software Developer Java

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

Bekijk vacature »

Front-end Developer

Dit ga je doen Doorontwikkelen van software; Ontwikkelen en testen van nieuwe functionaliteiten; Implementaties van nieuwe functionaliteiten en updates; Verzorgen van technische migraties naar nieuwe frameworks; Verwerken van incidenten. Hier ga je werken Onze klant, gevestigd in de regio Amsterdam, draagt bij aan het verbeteren van de veiligheid en efficiëntie van de Nederlandse infrastructuur door het ontwikkelen van afgemeten software oplossingen. Zo passen zij location intelligence toe om onderhoud en reparaties efficiënt te laten verlopen. Verder zorgen deze systemen dat incidenten zo snel mogelijk worden opgelost. Als Front-end Developer ben jij samen met je team betrokken met het (door)ontwikkelen van

Bekijk vacature »

PHP developer (Symfony, Doctrine)

Functie Als PHP developer wordt er een hoge mate van zelfstandigheid verwacht, maar ook dat je goed opereert in een team waar kennis wordt gedeeld en dingen als codereviews erg veel voorkomen. 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

Bekijk vacature »

Traineeship Full Stack Java developer

Dit ga je doen Start jij op 7 augustus bij de Experis Academy dan kickstart jij jouw IT-carrière! We leiden je op tot een gewilde Full Stack Java Developer met alle kennis en vaardigheden die nodig zijn om de arbeidsmarkt te betreden. Wat kun je verwachten, hoe zit een dag in het leven van een Trainee eruit? Periode 1 Als Full Stack Java Developer Trainee volg je vanuit huis een op maat gemaakte onlinetraining die in het Engels wordt gegeven. De tijd die je kwijt bent aan het volgen van de training kun je vergelijken met een fulltime werkweek. In

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET developer begint jouw dag na een bak koffie met een stand up. De vorderingen worden tijdens de stand up besproken en de doelen worden opgesteld waar jullie als team in de volgende sprint naartoe gaan werken. Onze backend is geschreven in .NET Core en onze Front-end in Angular. Bij ons ga jij dan ook Fullstack aan de slag. Jij wordt hier opgeleid om zelfstandig te kunnen programmeren en applicaties te kunnen implementeren. Er wordt op projectbasis gewerkt, dit bied leuke uitdagingen omdat elke klant een andere visie heeft over de applicatie die wij maken. Je gaat

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 »

Junior PHP Developer

Functieomschrijving Junior PHP Developer gezocht! Voor een opdrachtgever in de regio Gelderland zijn wij op zoek naar een Junior PHP Developer die onderdeel gaat worden van het ontwikkelingsteam van deze organisatie. In deze functie ga jij aan de slag met het schrijven van software voor de aansturing van en het managen van windparken en bijbehorende onderdelen. Hiernaast ga jij je bezighouden met het ontwikkelen, testen en onderhouden van diverse webapplicaties. Het team waarin je komt te werken bestaat uit 3 developers, hierdoor krijg je veel verantwoordelijkheid en de kans om jezelf verder te ontwikkelen. Er wordt echter wel van je

Bekijk vacature »

Medior Java developer

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 »

Java Developer

Functieomschrijving Are you an experienced Java Developer who wants to be challenged? Then this is your job! As a Java Developer, you are co-responsible for building custom applications within our extensive IT landscape. Development takes place on both the back-end side (Spring/JEE). Together with the IT department, you are responsible for the daily adjustments and expansions of our IT systems. In addition, you will work in small scrum teams using the Agile methodologies. Besides the realization of our in-house systems, you are responsible for the roll-out of the application (version) as well as the operational support after going live. Team

Bekijk vacature »

Webshop beheerder / Fullstack developer

Functie omschrijving Wij zijn op zoek naar een full stack developer die zich bezig gaat houden met het uitbreiden en verbeteren van de online webshop. Een onderdeel van jouw werkzaamheden is naast het beheren van de webshop ook om de processen en structuren te stroomlijnen. Ben jij een leergierige en ambitieuze junior developer met technische skills? Ben jij op zoek naar een werkgever die jouw de volledige vrijheid geeft om jezelf tot een volwaardige senior te ontwikkelen? Lees dan snel verder! Werkzaamheden Onderhouden van de webshop (denk aan het bijhouden van de voorraad); Nieuwe functies toevoegen aan de product configurator

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 »

Front-end PHP Developer

Dit ga je doen Bouwen van de frontend van een nieuwe applicaties; Verbeteren van de user experience; Opstellen van een style guide; Schakelen met collega developers over de te bouwen oplossing; Je speelt een belangrijke rol in het neerzetten van het nieuwe systeem; Werken met o.a. Symfony 6, API Platform, Twig, Javascript, Redis Automatiseren van processen; Koppelen van verschillende functionaliteiten; Unit tests, integration tests, end-to-end tests; In de toekomst ga je nog werken aan andere projecten. Hier ga je werken Voor onze vaste opdrachtgever in de regio Breda zijn wij op zoek naar een Frontend Developer. Het betreft een organisatie

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 »
DonutsNL Donut

DonutsNL Donut

28/12/2019 21:59:08
Quote Anchor link
Hi Guys,

Ik doe een poging om het MVC model, de voor en nadelen, beter te begrijpen. Een van de uitdagingen die ik tegenkwam betrof het injecteren van afhankelijkheden in bijvoorbeeld een specifieke controller en daarbij te blijven voldoen aan het idee van object isolatie (en geen tight coupling).

Zoekende op het internet vond ik uiteenlopende oplossingen en patronen om hiermee om te gaan. Veel van deze voorbeelden vond ik echter bijzonder complex, zeer slecht leesbaar of te abstract (veel werk en code). Daarbij ontstond het idee om hiermee in mijn hobbyapplicatie anders om te gaan.

In mijn huidige implementatie zoekt mijn dispatcher naar specifieke comments (mbv PHP tokenizer) in de te laden controller file en injecteert de gewenste objectreferenties op basis van de daar aangetroffen instructies. Zie onderstaande image.

Ik ben echter benieuwd naar redenen en jullie ervaringen waarom deze aanpak af te raden is.

Ook zou ik graag willen begrijpen waarom veel implementaties uiteindelijk zo complext lijken te worden.

Alvast bedankt voor jullie gedachten.

Grt Donuts,


Afbeelding
Gewijzigd op 30/12/2019 12:14:06 door DonutsNL Donut
 
PHP hulp

PHP hulp

25/04/2024 09:53:33
 
Rob Doemaarwat

Rob Doemaarwat

30/12/2019 07:54:00
Quote Anchor link
Niemand? Vooruit dan, hierbij wat ongezouten opmerkingen:
1) "waarom veel implementaties uiteindelijk zo complext lijken te worden" -> zie bovenstaand voorbeeld.
2a) Persoonlijk heb ik een hekel aan dit soort pseudo-code-in-comments. Als het code is schrijf het dan als code, ipv dat een aparte parse slag, vermoedelijk met wat caching, allerlei "magische dingen" doet.
2b) Eigenlijk heb je hier dus toch gewoon een tight coupling gemaakt?
3) Het is "Dependency injection" (alhoewel: "Depen-dancy" ook wel een grappig - swingend - woord is).
Gewijzigd op 30/12/2019 08:35:53 door Rob Doemaarwat
 
DonutsNL Donut

DonutsNL Donut

30/12/2019 12:30:41
Quote Anchor link
Bedankt voor de FB, al kan ik niet zoveel met de eerste opmerking.

Aangaande 2a, Implementatie van bovenstaande betreft ongeveer 5 regels code, zonder caching of andere moeilijke dingen. Anders dan een persoonlijke voorkeur lees ik weinig technische argumentatie. Mijn doel met deze impl is gemak en flexibiliteit, hetgeen ook het doel lijkt te zijn van complexere implementaties. De vraag of er technische argumenten zijn deze aanpak wel/niet te gebruiken blijft.


De overige punten zetten me aan tot nadenken over of het corrigeren van :)... waarvoor dank.

:dance:
Gewijzigd op 30/12/2019 12:31:14 door DonutsNL Donut
 
Rob Doemaarwat

Rob Doemaarwat

30/12/2019 21:02:36
Quote Anchor link
DonutsNL Donut op 30/12/2019 12:30:41:
al kan ik niet zoveel met de eerste opmerking.

In elk framework zal het in 1e instantie wel "simpel" begonnen zijn, maar zijn er in de loop der tijd steeds meer toeters en bellen bij gekomen. Als je dan halverwege instapt is het vrij complex. Omdat je dit nu zelf ontwikkelt ben je er vanaf T=0 bij (en bouw je alleen die functies in die je nodig hebt), waardoor je het zelf 100% blijft snappen en logisch vindt.

DonutsNL Donut op 30/12/2019 12:30:41:
zonder caching of andere moeilijke dingen

Dus elke keer als je dit bestand "include" (evt. via autoloading) is er ergens een trigger die het nogmaals in PHP tokens omzet, de juiste commentaar-regels er uit vist, en daar nog wat magisch doet? Wat doet dat me je performance? ("normale frameworks" cachen dit soort "annotations" - het liefst een PHP formaat, zodat het nog weer eens door de OPcache wordt gecached).
 
Ozzie PHP

Ozzie PHP

30/12/2019 23:27:55
Quote Anchor link
Ik hou ook niet van allerlei ingewikkeld taalgebruik. Daarom gewoon in simpele woorden:

De kracht van OOP ligt in het feit dat je classes kunt herbruiken. Iedere class moet je zien als een losstaand "ding".

Stel je hebt een class die banden op een auto monteert (ja, je moet wat hè ... het gaat om het voorbeeld), dan wil je dat die ene class banden kan monteren op iedere auto en kan omgaan met alle soorten en maten banden van allerlei merken. Je wil niet dat je voor ieder type band / type merk / afmeting / type auto een aparte class moet schrijven.

Die class moet dus super onafhankelijk zijn. Hij moet nergens aan gebonden zijn, niet aan een bepaald type band, niet aan een bepaalde afmeting, niet aan een merk enz.

Je vroeg: "Ik ben echter benieuwd naar redenen en jullie ervaringen waarom deze aanpak af te raden is."

Jouw aanpak is af te raden omdat je in de class zelf hebt aangegeven welke andere classes er gebruikt moeten worden, en dat wil je niet. De wijze waarop je dat doet (in jouw geval via een comment), doet daarbij niet terzake.

Om even terug te komen op de class die de banden monteert ... in feite zeg jij nu in jouw comment "gebruik altijd sleutel X met maat 8 om een band te monteren". Die sleutel X met maat 8 zit nu dus "vast" aan jouw banden-monteer-class. En dat wil je niet, want wat als je ineens andere banden wilt monteren waarvoor sleutel Q met maat 3 benodigd is? Dan werkt je class ineens niet meer.

Wat je dus wil, is "van buitenaf" de sleutel aangeven aan de banden-monteer-class. Op die manier kun je telkens een andere sleutel meegeven:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$sleutel_type
= 'Q';
$sleutel_size = '12';

$banden_monteren = new BandenMonteerClass($sleutel_type, $sleutel_size);

$banden_monteren->start();

?>

En vervolgens als je andere banden wilt monteren:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
<?php

$sleutel_type
= 'L';
$sleutel_size = '4';

$banden_monteren = new BandenMonteerClass($sleutel_type, $sleutel_size);

$banden_monteren->start();

?>

Hoop dat dit het iets duidelijker voor je maakt.
Gewijzigd op 30/12/2019 23:30:05 door Ozzie PHP
 
Ward van der Put
Moderator

Ward van der Put

31/12/2019 17:13:20
Quote Anchor link
Je code werkt eigenlijk meer concreet zo:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
<?php
class beheerController extends baseController
{
    const AUTH_PROVIDER = 'libs\OAuthProvider';
    const TEST_KEY      = 'libs\tplHandler';

    public function __construct(object $model, array $injections)
    {

         // ...
    }
}

?>


Je dependencies zijn in wezen gewoon class constants, alleen heb je de definities verplaatst van echte constanten naar comments. Daar zie ik geen goede reden voor: het is een onlogische omweg.
 
Ad Fundum

Ad Fundum

30/04/2020 11:05:45
Quote Anchor link
Een waarschuwing vooraf: MVC is ouder dan PHP en oorspronkelijk niet bedoeld voor stateless code.

Scheiding van het gegevensdomein ('Model') komt al met het gebruik van een database. Je zou in PHP kunnen volstaan met het Active Record patroon dat PHP objecten automatisch vult door het uitlezen van structeren in de database. Maar het gegevensdomein reikt bijna altijd verder dan een enkele tabel. Je kunt tabel-oversteigende SQL-queries in Models stoppen via heredoc, nog beter zou zijn om ze als views en functies in de database te schrijven.
Afhankelijk van je perceptie van de functie van een database kan je kiezen voor ORM, waarbij de gegevensstructuur in PHP wordt gedefineerd en de database als slaaf gezien kan worden van je scripts. Dit patroon is nog niet eens zo onlogisch gezien de geschiedenis van MySQL. Maar wanneer je vindt dat de database server de eigenaar is van de gegevens en garanties moet kunnen geven over de consistentie er van, en dat er naast jouw client in PHP nog andere clients zijn die van dezelfde data gebruik maken, is ORM ineens geen logische keuze meer. Laat de database vooral doen waar het goed in is, in ieder geval beter dan PHP. Het komt de systeemprestaties ten goede.

Scheiden van de presentatie ('View') van gegevens is lastiger, omdat er dankzij de browser meerdere abstractielagen bestaan. De structuur van de presentatie is doorgaans in HTML5, de layout in CSS, interactiviteit in JavaScript. Een veelgebruikte manier om hier mee om te gaan is om alles zo goed als het gaat maar in templates te stoppen, met bijbehorende 'widgets'. Maar je kunt er ook voor kiezen om te denken in gebruiksinterface-componenten, en hiervoor voorzieningen te maken zoals PHP-objecten voor formulieren, tabellen, knoppen, die pas in een later stadium worden vertaald naar HTML, CSS en JS.

Dan heb je nog de regelaars ('Controller') voor de 'business-logic', die nog wel eens wordt misbruikt voor allerlei andere code die er eigenlijk niet in thuis hoort. Een oorzaak hiervan is dat veel mensen er in eerste instantie vanuitgaan dat een View niet direct een Model mag bevragen. Maar dit mag juist wél met MVC. Een View hoeft het dus niet te doen, maar het mag wel, waardoor een Controller minder hoeft te doen. Een View mag uitdrukkelijk _niet_ de data van een Model muteren, dat moet altijd via een Controller.

Voor alle objecten die in een framework voor komen wordt gezegd dat het gemakkelijk te testen moet zijn, met als voorwaarde dat objecten zelf geen nieuwe objecten mogen aanmaken. In plaats daarvan moeten alle andere objecten die een object nodig heeft, worden meegegeven ('Dependency injection'). Dat kan via constructors, of methoden. Het is gemakkelijk om de weg kwijt te raken als je een grote hoeveelheid objecten moet beheren. Veelgebruikte frameworks bieden bijvoorbeeld service locators aan, maar dat wordt ook wel weer gezien als een anti-patroon. Dan kan je beter het factory-patroon gebruiken, wat meer werk is om op te zetten maar wat uiteindelijk minder verwerkingstijd kost.

Volgens de stichter van PHP, Rasmus Lerdorf, is het niet goed mogelijk om een raamwerk te maken dat geschikt is voor meerdere soorten applicaties: https://www.youtube.com/watch?v=DuB6UjEsY_Y

De tweede beste optie die dan over lijkt te blijven is om zelf maar een raamwerk te schrijven dat geschikt is voor de eigen applicatie, waarbij je niet moet schromen om goede adviezen en (waar dat mag) code van andere raamwerken over te nemen.
Gewijzigd op 30/04/2020 11:11:53 door Ad Fundum
 



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.