Dependency Injection

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Database Developer

Functieomschrijving Heb jij ongeveer 3 jaar ervaring als Database Developer met MS SQL of een vergelijkbare database? Wil jij werken voor een gewaardeerde werkgever in regio Tilburg waar jij de tijd en ruimte krijgt jezelf te ontwikkelen? Lees dan snel verder! Hoe ziet jouw takenpakket eruit? Je houdt je bezig met het creëren en bouwen van MS SQL server databases; Je gaat projecten vanaf het begin tot het eind begeleiden. Je sluit aan bij meetings met klanten om hun processen in kaart te brengen. Vervolgens voer jij het project uit en zorgt dat dit zo goed mogelijk verloopt; Je werkt

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 »

.NET Developer Senior

Dit ga je doen Het ontwikkelen van backend applicaties in C#; Het maken van vele koppelingen met andere ERP-applicaties zoals JD Edwards en SAP; Je bent (mede) verantwoordelijk voor het opstellen van technisch ontwerpen voor de te ontwikkelen software oplossingen; Je bent gemiddeld 90% van je tijd inhouse oplossingen aan het ontwikkelen en testen. De overige 10% van je tijd ben je bij klanten op locatie om oplossingen te implementeren, klanten te begeleiden en de software verder te innoveren; Naast het zelfstandig ontwikkelen van software oplossingen ben je ook bezig met het waarborgen van je contacten bij de klant, het

Bekijk vacature »

Laravel PHP developer in een jong team

Bedrijfsomschrijving Als je op zoek bent naar een werkplek waar plezier en uitdaging hand in hand gaan, dan is dit bedrijf de juiste keuze voor jou. Hier kun je werken aan uitdagende projecten en krijg je als developer veel verantwoordelijkheid. Het bedrijf waardeert kwaliteit boven kwantiteit en richt zich op het ontwikkelen van hoogwaardige applicaties en websites waar klanten enthousiast over zijn. Dit bedrijf is vooruitstrevend en streeft naar het leveren van de best mogelijke resultaten voor hun klanten. Als medior PHP ontwikkelaar met 3 jaar ervaring ben jij de persoon die we zoeken. Je krijgt hier de kans om

Bekijk vacature »

Ervaren PHP Developer

Functieomschrijving PHP Developer met brede ervaring gezocht! Ben jij een Full Stack PHP Developer met brede ervaring die toe is aan een volgende stap? Lees dan snel verder! Voor onze eindklant in de regio Nunspeet zijn wij op zoek naar een ervaren PHP Developer die het IT Team van deze organisatie gaat versterken. Wij zoeken een enthousiaste en breed georiënteerde IT-er die er voor gaat zorgen dat deze innovatieve organisatie de volgende stap gaat maken. Om deze functie goed uit te kunnen voeren moet je communicatief goed zijn en in staat zijn om zelfstandig problemen op te lossen. Daarnaast bestaat

Bekijk vacature »

Java Developer

Dit ga je doen Als Java Developer ben je verantwoordelijk voor: Het ontwikkelen van nieuwe en bestaande webservices; Het uitbreiden van functionaliteiten binnen de producten- en dienstenportefeuille; Het werken aan gegevensuitwisseling met bijvoorbeeld SOAP; Testen van frameworks met gebruik van UNIT en Selenium. Hier ga je werken De organisatie waar je komt te werken is een semi-overheidsinstelling, gesitueerd in Utrecht en zorgt voor een goede samenwerking tussen verschillende overheidsinstanties. Het is een familiaire club die gaat voor kwaliteit en langdurige relaties. Zo zorgen zij ervoor dat er op grote schaal vertrouwelijke informatie tussen verschillende overheidsinstellingen wordt uitgewisseld. Hun werk zorgt

Bekijk vacature »

Medior front-end developer gezocht (€3.300 -

Functie Wat ga je doen? Jij als front-end developer gaat werken binnen de teams van/voor onze klant. Je werkt in een team met starters en ervaren ontwikkelaars met allemaal 1 overeenkomst; passie voor het vak. Maak je een fout? Geen probleem, leer ervan en ga dan weer door. Door de variëteit aan werk kun je in verschillende omgevingen een kijkje nemen en jezelf dus snel ontwikkelen. Wat hebben we jou te bieden? • Uitdagende projecten bij mooie klanten (bij jou in de buurt, of binnenkort intern vanuit ons kantoor!) • Een jonge organisatie met talentvolle collega’s • Veel ruimte voor

Bekijk vacature »

Medior Java developer (fullstack)

Wat je gaat doen: Of beter nog, wat wil jij doen? Binnen DPA GEOS zijn we dan ook op zoek naar enthousiaste Java developers om ons development team te versterken. Als Java developer werk je in Agile/Scrum teams bij onze klanten en daarbij kun je eventueel ook andere ontwikkelaars begeleiden in het softwareontwikkelproces. Verder draag je positief bij aan de teamgeest binnen een projectteam en je kijkt verder dan je eigen rol. Je gaat software maken voor verschillende opdrachtgevers in jouw regio. Je bent een professional die het IT-vak serieus neemt en kwaliteit levert. Je leert snel vanwege je diepgaande

Bekijk vacature »

Front end developer

Functie Jij als ervaren Front end developer bent een expert het gebied van Javascript en React. Je wordt onderdeel van een multidisciplinair team bestaande uit een PO, twee Front end developers, een DevOps/Back end developer, een UX/UI designer en een projectmanager. Verder is er iemand verantwoordelijk voor de HR en is de algemeen directeur nauw betrokken bij alle projecten. Dagelijks hou jij je bezig met de verschillende projecten die zijn opgenomen in de sprint. Daarnaast denk je mee over mogelijke oplossingen om de behoefte van de klant op de beste manier in te vullen. Verder spar jij intern met collega’s

Bekijk vacature »

Front end developer

Functie Het team bestaat uit User Experience designers, Data Scientists en Software Engineers met passie voor hun vak. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van ontwerp en ontwikkeling zullen samenkomen in een proof of concept. Nadat is vastgesteld dat de oplossing voldoet aan de belangrijkste behoeftes worden producten of services gevalideerd door middel van korte iteraties. Hiermee zorgen ze ervoor dat het werk voldoet aan de technische vereisten en gebruikersbehoefte. Door het inzetten van de nieuwste technologieën die toekomstbestendig zijn weten ze klanten omver te blazen. Ook geven en organiseren ze veel

Bekijk vacature »

Java Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 12946 Introductie We are looking for a Java Developer! Our client is one of the most innovation companies located within the Netherlands. We provide high quality software in a high-tech and challenging market. Functieomschrijving The department is specialized in creating and developing high quality software for manufacturing automation in a high tech environment. We strive to provide our clients with high quality software and deliver state of the art solutions in a variety of ways. Creating software infrastructure using Java SE / EE Create applications to fine tune manufacturing processes

Bekijk vacature »

Android developer

De functie Schiphol is een plek om te reizen, te verblijven en te werken. Door middel van data en technologie richten we op al deze gebieden het leef- en werkklimaat optimaal in en zorgen we voor een slimmere en efficiëntere operatie. Wij ontwikkelen nieuwe producten en diensten vanuit de wensen en behoeften van onze klanten, voorspellen passagier flows en testen digitale oplossingen om rijen en andere pijnpunten in het proces te verminderen. Met slimme feedback van sensortechnologie maken we zelfs data van toiletten en stoelen inzichtelijk en bruikbaar. Het Commercial Platform bestaat uit multidisciplinaire teams met een end-2-end verantwoordelijkheid voor

Bekijk vacature »

Front-end developer (Vue.js) gezocht!

Functie Als Front-end developer is het jouw doel om efficiënte en effectieve frontend code te ontwerpen, ontwikkelen en onderhouden die goed aansluit bij de functionele behoefte vanuit de klant. Je zorgt voor optimale SEO-resultaten, sitespeed en frontend security. You build it, you run it, you own it! Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden

Bekijk vacature »

Fullstack developer

Functieomschrijving Heb jij kort geleden jouw HBO ICT diploma in ontvangst mogen nemen? Of ben je toe aan een andere uitdaging? Voor een erkende werkgever in de omgeving van Breda zijn wij op zoek naar een Fullstack developer. Kennis of ervaring met C# & SQL is een must! Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten; Je bent verantwoordelijk voor de beheer en ontwikkeling van de software; Je draagt bij aan de implementatie van aanpassingen, verbeteringen en aanvullingen in de C# based applicaties; Je test de software en ontwikkelt deze door; Je brengt de aanpassingssuggesties van klanten in

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

27/05/2026 08:07:40
 
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.
 

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
 



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.