datamappers?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Junior Back end developer PHP, Symfony

Functie Wij hebben onlangs onze eerste collega’s aangenomen, waardoor ons development team momenteel uit 4 personen bestaat. We bouwen onze software op basis van een PHP-framework (wat op zichzelf een Symfony framework is). Qua ontwikkeling focussen wij ons op 3 focus velden; – API-ontwikkeling/ Component Creatie – Implementatie – Framework ontwikkeling; het toevoegen van nieuwe functionaliteit of interne microservices Onze senior software engineer focust zich momenteel op de laatste twee punten, maar wij komen handen te kort op het eerste veld. Daarom zijn wij op zoek naar een enthousiaste junior software engineer die graag de kneepjes van het vak wil

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 »

Front-end developer E-Commere

Functie E-commerce is een ‘’snelle’’ wereld. Om hierin continu voorop te blijven omarmen ze in een vroeg stadium nieuwe technieken. Een webshop is nooit af en kan altijd beter, sneller en efficiënter. Tegelijkertijd hebben ze vanaf hun oprichting altijd vastgehouden aan kwaliteit boven snelheid, en dit loont. Als front-end developer heb je een adviserende rol en sta je aan het eindpunt van alles wat met designs te maken heeft. Je overlegt met klanten en collega’s, en zet je in om ideeen om te zetten tot unieke concepten. Je bent het aanspreekpunt voor de klant en bewaakt tevens de planning. Eisen

Bekijk vacature »

C# Unity Developer

Functieomschrijving Ontwikkel jij mee door applicaties te bouwen die bijdragen aan het optimaliseren van processen? Voor een erkende werkgever in regio Tilburg zijn wij op zoek naar een Unity C# Developer die graag de uitdaging aangaat! Jouw werkzaamheden zullen er als volgt uitzien: Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software; Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Je bent verantwoordelijk voor het uitvoeren van updates/aanpassingen aan de reeds draaiende applicaties. Bedrijfsprofiel Je komt te werken voor een internationale werkgever in regio Tilburg. Samen met een vooruitstrevend team

Bekijk vacature »

Senior PHP developer

Functie Als Senior PHP developer heb je een sterke mening over de architectuur van projecten en de processen binnen het team. Je bent de sparringpartner voor je Team Lead. Ook ondersteun je met jouw kennis de minder ervaren developers in jouw team. Ze werken regelmatig aan projecten vanaf scratch en dit geeft ruimte om voor nieuwe technieken te kiezen. Naast het ontwikkelen van software ben je continue bezig om ook jezelf te ontwikkelen. Ze werken met o.a.: PHP, Laravel, Doctrine, PHP Unit, Behat, React, TypeScript, (My)SQL, Postgress, Redis, ElasticSearch, Docker, Nginx, GIT flow, JIRA, AWS. Eisen • HBO werk- en

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET ontwikkelaar start jij in een ontwikkelteam met 7 .NET developers. In ons team werken er drie senior .NET developer, twee medior .NET developers en twee junior .NET developers. Er is dan ook genoeg senioriteit in ons team om jou te kunnen bieden wat jij nodig hebt! Wij werken in scrum en hebben drie wekelijkste sprints. Daarnaast doen wij minimaal vier keer per jaar een release. Ons platform is ontzettend complex en groot. Het is dan ook in het begin belangrijk dat jij de processen gaat begrijpen. Jij krijgt dan ook een cursus om beter te begrijpen

Bekijk vacature »

PHP developer (Laravel, Docker, Gitlab-CI)

Functie Het IT-team bestaat momenteel uit 4 ontwikkelaars. Ieder onderdeel van de software draait op aparte servers en het bestaat dus echt uit verschillende componenten intern ontwikkeld en je werkt aan alle facetten. Van uitbreiding van de core tot maatwerk voor de klant. Ook liggen er verschillende uitdagingen op servervlak en databases. Je zult de eerste periode veel samenwerken met de lead developer om vervolgens echt je gang te gaan binnen de software. Een groot deel van de systemen is gebouwd met behulp van het Laravel framework en PHP (minimaal 7.2), Docker voor lokaab gebruik en Gitlab-CI voor het deployen

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 »

.NET developer

Functie Als .NET ontwikkelaar ga jij aan de slag bij een van onze klanten actief in de High Tech Industrie. Onze klanten zijn voornamelijk gelokaliseerd in de omgeving van Eindhoven. Wij zijn erg selectief als het gaat om de projecten die wij accepteren en richten ons dan ook alleen op innovatieve en complexe projecten. Omdat onze klanten voornamelijk gespecialiseerd zijn in de machinebouw, werk jij ook vaak dicht tegen de machines aan. Ons team bestaat momenteel uit Embedded engineers, IOT developers en Cloud engineers. Wij werken voornamelijk aan Microsoft projecten waar er gebruik wordt gemaakt van WPF, UWP, .NET Core

Bekijk vacature »

Medior PHP developer

Functie Het team bestaat inmiddels uit zo’n 25 collega’s met specialisten op het gebied van development, data(analyse), marketing, infrastructuur en finance. Ze hebben een supermodern pand en bieden hiernaast veel vrijheid en verantwoordelijkheid. Ze doen er alles aan om jou op te gemak te stellen. Zo kun je je eigen werkplek inrichten naar persoonlijke wensen, maar gaan ze bijvoorbeeld ook jaarlijks met elkaar wintersporten en zijn er andere leuke uitjes. Als onderdeel van één van de scrumteams ga je aan de slag, samen ben je medeverantwoordelijk voor het doorontwikkelen van hun business applicatie waar het traffic team dagelijks mee werkt.

Bekijk vacature »

Airport Developer / System engineer

De functie Als onze nieuwe Airport Developer / System Engineer is je doel om uit nieuwbouw- en onderhoudsprojecten maximale waarde te creëren voor Schiphol Group en haar stakeholders. Vanuit je visie en expertise, maar ook (technologische) ontwikkelingen, wetgeving en beleid vertaal je klantwensen naar een gedegen programma van eisen. In de planontwikkelingsfase werk je nauw samen met Plan Ontwikkelaars om je kennis in te brengen ten behoeve van de kwaliteit van het investeringsvoorstel. Je overlegt met diverse partijen, stelt de vraag achter de vraag en verbindt zo de belangen van de luchthaven, proceseigenaar en asseteigenaar om tot een gedragen ontwikkelopgave

Bekijk vacature »

Back-end ontwikkelaar

Functie omschrijving Wil jij meebouwen aan diverse databasesystemen in een klein bedrijf met een platte organisatie? In een team van ruim 10 ontwikkelaars wordt er aan diverse ICT oplossingen gewerkt. Jouw taken hierbij zullen bestaan uit: Het onderhouden en door-ontwikkelen van bestaande databases. Denk hierbij aan schema verbeteringen en performance-tuning. Bij nieuwe ontwikkelingen ga jij ook bezig met het bouwen van het databaseschema. Omdat je in een klein team werkt zal je ook de C# routine verder uitbouwen en ontwikkelen. Ook kan je meedraaien in algemene refactory-, ontwikkel- of testwerkzaamheden. Je zal voornamelijk gebruik maken van de volgende technieken: .NET

Bekijk vacature »

Medior .NET developer

Functie Jij gaat als Medior .NET ontwikkelaar aan de slag in ons scrumteam met 6 developers die gepassioneerd en actief bezig zijn om onze spelers kwalitatieve en mooie spelervaringen aan te bieden. Als medior .NET developer ga jij werken aan een technisch hoogwaardig platform welke bezoekerspieken verwerkt van tienduizenden tot honderdduizenden gebruikers per minuut! Ons scrumteam werkt in drie wekelijkse sprints en wij beginnen iedere ochtend met een stand-up. Jij werkt bij ons met C# .NET, .NET Core, React.JS, Xamarin, Azure, Docker en Kubernetes. Wij hechten enorm veel waarde aan het leveren van hoogwaardige en kwalitatieve code. Zodra jij de

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Wil jij bij een platte en informele organisatie werken? Lees dan snel verder! Voor een opdrachtgever in omgeving Boskoop dat zich gespecialiseerd heeft in het realiseren van veilige netwerkverbindingen zijn wij op zoek naar een leuke software developer ter versterking van het huidige team. Hoe kan jouw dag er straks uitzien? Je gaat technische klussen uitvoeren op locatie bij klanten.Je onderhoudt contact met de projectleider om er zeker van te zijn dat een projecten goed verlopen. Je gaat klanten ondersteunen op het gebied van geleverde software en webapplicaties. Je gaat software en webapplicaties ontwikkelen met behulp van de talen

Bekijk vacature »

Senior Front-end developer Consultancy

Functie Als front-end developer ga je aan de slag voor verschillende klanten, waarbij veel rekening wordt gehouden met waar je woont (dit is altijd binnen het uur), en word er gezocht naar een organisatie die past bij jou. Zowel qua persoonlijke ambities als de technische aansluiting. De opdrachten duren gemiddeld 1 à 2 jaar maar dit hangt ook af van je wensen. Je werkt in een teamverband voor een klant en zult nauw samenwerken met zowel eigen collega’s als die bij de klant werkzaam zijn. Ze zijn op zoek naar een technische front-end developer die ruime ervaring heeft in één

Bekijk vacature »
Jeroen VD

Jeroen VD

29/08/2013 14:20:44
Quote Anchor link
weer verder met OOP. wat is het beste gebruik van databases in OOP? afgezien van de manier (PDO, mysqli, mysql) ervan.

ik dacht, en wilde dus weten of dat een goede manier is, om voor elk object wat een database gebruikt, een apart opbject te maken, een mapper. een voorbeeldje:

object User, die gebruikt de UserMapper (extended van een algemeen databaseobject), om bijv userId op te halen

of is het beter om dit in het object User te doen? ik denk zelf van niet, maar wat denken jullie?
Gewijzigd op 29/08/2013 15:04:44 door Jeroen VD
 
PHP hulp

PHP hulp

26/05/2026 14:45:53
 
Ken PHP

Ken PHP

29/08/2013 14:32:11
Quote Anchor link
Hier ben ik ook wel nieuwsgierig naar. Ben al een tijdje over hetzelfde aan het nadenken en kan wel wat ideeen van andere gebruiken.

Ik heb nu voor elk 'onderdeel' of db table een eigen class, maar wil heel graag een extra 'laag' aanbrengen, een datamapper of default model...

Classes die ik nu oa heb;
- Background.model.php
- Button.model.php
- Carousel.model.php
- Factory.model.php
- FactoryBrand.model.php
- FactoryCategories.model.php
- FactoryCategory.model.php
- FactoryProduct.model.php
- FactoryProducts.model.php
Etc.....

Is dit in de basis een goede structuur? Of moet ik toch anders denken?

Gr, Ken
 
Frank Nietbelangrijk

Frank Nietbelangrijk

29/08/2013 14:55:05
Quote Anchor link
Jeroen,

overduidelijk je eerste optie.

kijk eens naar de grotere frameworks,
daar zie je duidelijk één database class en voor bijna elke tabel in de database een eigen Entity-class. De 'user' entity heeft dan alle properties zoals die ook in de tabel Users als kolommen voorkomen. Daarnaast heeft deze class getters en setters.
Dankzij ORM weten we hoe deze properties in de database worden opgeslagen.
Maar voor ieder object een eigen (afgeleide) mapper kan natuurlijk ook.


Toevoeging op 29/08/2013 14:57:28:

wat mij betreft de mappers niet extenden van de database class maar de mappers moeten de database class gebruiken.
 
Jeroen VD

Jeroen VD

29/08/2013 15:04:06
Quote Anchor link
hmm, krijg je op die manier dan niet veel te veel geheugengebruik ten opzichte van elke class een eigen mapper geven die zijn eigen geoptimaliseerde queries heeft?

en met de databaseclass bedoel ik de verbinding enzo... dat de mapper alleen zijn getters en setters heeft, zodat de verbinding eenmaal aangemaakt wordt, met zo weinig mogelijk code?

@ken, jij bedoeld elke tabel een aparte class geven?.... dan is jouw database structuur op het eerste gezicht behoorlijk inefficient
 
Wouter J

Wouter J

29/08/2013 15:35:21
Quote Anchor link
Elke tabel (op koppeltabellen na) zijn vertegenwoordigt door een class (entity) in OO. De database is vertegenwoordigt door een Database klasse en daartussen in heb je datamappers, die zijn specifiek voor 1 entity.
 
Jeroen VD

Jeroen VD

29/08/2013 15:46:36
Quote Anchor link
als ik het goed begrijp dus dit?:

willekeurige klasse -> tabel klasse -> Mapper klasse (die zijn verbinding etc haalt uit de database klasse) -> database tabel

en naamgevingsconventies hierbij, of is dat gewoon tableTablename.class en tablenameMapper.class etc
 
Wouter J

Wouter J

29/08/2013 15:54:57
Quote Anchor link
Nee, het is:

Entity -> DataMapper -> Database => DB

Dus bijv:
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
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<?php
class User
{
    private $name;
    private $age;

    // ...
}

class UserMapper implements DataMapperInterface
{
    public function findById($id)
    {

        $result = ...; // perform SELECT query

        return $this->populate($result);
    }


    public function populate(array $result)
    {

        $u = new User();
        $u->setName($result['name']);
        $u->setAge($result['age']);

        return $u;
    }
}


class PDOMySQLDatabase extends AbstractPDODatabase
{
    // ... db methods
}
?>

Waarschijnlijk ga je een GeneralDataMapper maken, aangezien de methods create, find, save en delete vaak hetzelfde zijn. Je kan zelfs met __call werken en ook de method findById en findByAge in deze klasse verwerken. Het enige wat je dan nog nodig hebt is een populate en extract method, die informatie in/uit een Entity stoppen/halen en natuurlijk custom methods, zoals findByNameOrderedByAge().
Even je code tussen de code-tags gezet, omdat dat niet meer automatisch gaat bij de php-tags[/modedit]
Gewijzigd op 29/08/2013 23:37:22 door Nick Dijkstra
 
Jeroen VD

Jeroen VD

29/08/2013 23:16:29
Quote Anchor link
ik snap het bijna helemaal..... ligt het aan mij, of is die PDOMySQKDatabase een tikkeltje overbodig? wat doet die? waarom kun je in de mapper niet de complete query uitvoeren, waarbij je een simpel connectieobject toevoegt?
 
Wouter J

Wouter J

30/08/2013 08:28:08
Quote Anchor link
Quote:
is die PDOMySQKDatabase een tikkeltje overbodig? wat doet die? waarom kun je in de mapper niet de complete query uitvoeren, waarbij je een simpel connectieobject toevoegt?

Op deze manier ben ik niet afhankelijk van de manier van opslag, precies het nut van OO dus. Ik hoef alleen een andere klasse te instantiëren en ik kan een sqlite db gebruiken. Ik kan zelfs een nieuwe adapter maken en gaan werken met de MySQLi extensie of zelfs met een xml bestand. Dat kan ik allemaal doen door maar 1 regel te veranderen, anders moet ik elke datamapper aanpassen.
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/08/2013 09:31:15
Quote Anchor link
Als ik nu een functie wil hebben ( zoiets als toArray() ) die de private properties uit de User class (en ook andere entities) haalt en in een associatieve array teruggeeft? wordt dat dan een onderdeel van de DataMapperInterface?
 
Wouter J

Wouter J

30/08/2013 11:10:00
Quote Anchor link
Frank, nee. DataMapper is de laag tussen DB en Entity, wat jij nu doet heeft daar niks mee te maken. Ik zou dan een EntityUtil klasse maken die dit doet.
Wel is het zo dat de DataMapper dit moet doen, dus heb ik een method extract (oid) in mijn datamapper die dit doet. Deze roept simpelweg de EntityUtil aan:
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
19
20
21
22
23
24
25
26
27
28
29
<?php

class UserMapper extends AbstractDataMapper
{
    protected function extract(User $user)
    {

        return EntityUtil::toArray($user);
    }


    protected function populate(array $data)
    {

        $user = new User($data['name']);
        $user->setAge($data['age']);

        return $user;
    }
}


class EntityUtil
{
    static public function toArray($entity)
    {

        $entityReflection = new \ReflectionClass($entity);
        $data = ...; // gebruik reflection om data te krijgen

        return $data;
    }
}

?>
Gewijzigd op 30/08/2013 11:10:51 door Wouter J
 
Jeroen VD

Jeroen VD

30/08/2013 11:13:47
Quote Anchor link
het zal misschien een domme vraag zijn... maar hoe doe je dan in de method findById() de query uitvoeren? daarvoor heb je toch een geinstantieerd object van PDOMySQLDatabase nodig IN die method? of mag dat dan weer wel?

p.s. die db methods, zijn dat methods die de query daadwerkelijk uitvoeren, en je in de mapper alleen de query doorgeeft?
 
Wouter J

Wouter J

30/08/2013 11:52:32
Quote Anchor link
Quote:
daarvoor heb je toch een geinstantieerd object van PDOMySQLDatabase nodig IN die method? of mag dat dan weer wel?

Ja, je injecteert de Database instance in je DataMapper:
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
19
20
21
22
23
24
<?php

class UserMapper ...
{

    private $db;

    public function __construct(DatabaseInterface $db)
    {

        $this->db = $db;
    }


    public function findById($id)
    {

        return $this->populate($this->db->query(...)->getResult('FETCH_ASSOC'));
    }
}


// in gebruik
$db = new ...Database(...); // dit doe je 1 keer

$usermapper = new UserMapper($db); // geeft db instance mee

$usermapper->findById(2);
?>
Gewijzigd op 30/08/2013 16:09:30 door Wouter J
 
Jeroen VD

Jeroen VD

30/08/2013 12:05:47
Quote Anchor link
ah het wordt al een stuk duidelijker... blijft lastig, OOP!
in ieder geval bedankt, ga er mee stoeien :)
 
Ken PHP

Ken PHP

30/08/2013 13:06:09
Quote Anchor link
Jeroen VD op 29/08/2013 15:04:06:
@ken, jij bedoeld elke tabel een aparte class geven?.... dan is jouw database structuur op het eerste gezicht behoorlijk inefficient


Jeroen, kan goed begrijpen dat je dit denkt. Opzet van de database is ook wel anders dan mijn bericht doet vermoeden. Ik kan in ieder geval heel goed op weg met alle antwoorden. Dat was eigenlijk al een beetje wat ik zocht :) Bedankt voor je individuele reactie!
 
Frank Nietbelangrijk

Frank Nietbelangrijk

30/08/2013 15:53:18
Quote Anchor link
Dank je Wouter ik heb nu even niet de gelegenheid om hier echt mee te gaan stoeien maar wellicht kom ik nog terug met een vraagje.
 



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.