[OOP] CRUD method's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Social Media Specialist

Social Media Specialist locatie: Rotterdam (Zuid Holland) Wij zoeken op korte termijn een nieuwe collega, een social media specialist/ adviseur sociale media (24 uur), voor ons sprankelende team Communicatie van CJG Rijnmond. Onze focus ligt op het informeren en binden van onze in- en externe klanten en stakeholders en het versterken van onze naamsbekendheid en zichtbaarheid. Dat doen we in nauwe samenwerking met elkaar. Over de functie Ons team bestaat uit 7 communicatieprofessionals met ieder een eigen expertise. Als lid van het online team ben je verantwoordelijk voor het ontwikkelen, uitvoeren en analyseren van onze socialemediastrategie. Ook stel je campagnes

Bekijk vacature »

Junior .NET Developer

Dit ga je doen Als junior .NET Developer lever je met jouw oplossingen direct een bijdrage aan de bedrijfsprocessen van de klanten. Werkzaamheden waar jij je zoal mee bezig houdt zijn; Het ontwikkelen, onderhouden en optimaliseren van de draaiende platforms van de klanten; Softwareontwikkeling middels C#, .NET; Klantcontact om de wensen te bespreken en uit te werken; Optimaliseren van de (huidige) bedrijfsprocessen; De IT-afdeling bestaat uit 30 personen verdeeld over 3 teams. Het team waar je in terecht komt bestaat uit ongeveer tien man. Het is een team wat bestaat uit betrokken collega’s, waar iedereen bereidt is om elkaar te

Bekijk vacature »

Remote - Front-end Angular developer

Functie The IT team currently consists of the IT Manager, 2 back-end developers, 1 full-stack developer, 1 designer, and a DevOps engineer. They are currently looking for an experienced Front-end developer who will work autonomously and in a disciplined manner, being the only developer working on their Front-end applications at the start. They do have the ambition to find a second developer soon, who you will then be able to supervise. You will be working on the further development of their existing UI in Angular. But also developing a mobile app. They place great value on User Experience and opt

Bekijk vacature »

Starter/junior Magento developer gezocht!

Functie Je komt te werken in een zelfsturend team waarin vertrouwen voorop staat en inbreng en ideeën worden gewaardeerd. Ook staat innovatie centraal. Ze bieden jou de mogelijkheid om jezelf door te ontwikkelen. Denk hierbij aan cursussen en een persoonlijk ontwikkelplan. Je komt terecht in het team van momenteel 4 (ervaren) collega’s en zal meewerken aan de doorontwikkeling en nieuwbouw van de Magento platformen van meerdere opdrachtgevers volgens Agile/Scrum. Denk hierbij aan nieuwe functionaliteiten, UX en koppelingen met verschillende back-end systemen. Als starter/junior developer zul je direct begeleid worden door een senior uit het team. Het is van belang dat

Bekijk vacature »

PHP Programmeur

Functieomschrijving Vanuit het hoofdkantoor in omgeving Breda, ontwikkel je als PHP programmeur niet alleen webapplicaties, maar ben je verder ook gefocust op het constant inspelen op nieuwe innovaties m.b.t software ontwikkeling. Naast het ontwikkelen van webapplicaties, bouwt deze toffe werkgever ook webshops en websites voor hun opdrachtgevers. Wat ga je doen? Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het ontwerpen en implementeren van webapplicaties met het Symfony framework; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden en updaten van bestaande applicaties die

Bekijk vacature »

Laravel / PHP developer gezocht!

Functie omschrijving Wij zijn op zoek naar een Laravel PHP Developer voor een leuk bedrijf in de omgeving van Amsterdam! Je zult je bezig houden met de volgende werkzaamheden: Je gaat aan de hand van de wensen van klanten software ontwikkelen; Je bent bij het gehele proces betrokken; van A tot Z; Je hebt na de oplevering contact met de klant wanneer zij problemen ervaren; Je denkt mee over het verbeteren van de werkprocessen; Je denkt mee over softwareoplossingen; Je speelt in op de behoefte van de klant; Je houdt je bezig met het verbeteren, aanpassen en vernieuwen van de

Bekijk vacature »

Python (Django) developer - Remote in The Netherla

Functie Together with your team, consisting of a senior, 2 mediors and one junior developer, you will work on their software in an Agile-based approach. You have an eye for quality, risk, and customer interest. Communication with your colleagues and, where necessary, with customers, plays an important role in achieving a successful result. As a person, you are smart, get things done, and are result-oriented. There is a lot of independence within the development team, apart from the stand-up (10:00 am) and occasional pair-programming sessions. Techniques they use include Python, Django, MySQL, Mercurial, Ubuntu Linux, Nginx. In terms of front-end

Bekijk vacature »

Ervaren Magento developer gezocht!

Functie Je komt te werken in een zelfsturend team waarin vertrouwen voorop staat en inbreng en ideeën worden gewaardeerd. Ook staat innovatie centraal. Ze bieden jou de mogelijkheid om jezelf door te ontwikkelen. Denk hierbij aan cursussen en een persoonlijk ontwikkelplan. Je komt terecht in het team van momenteel 4 (ervaren) collega’s en zal meewerken aan de doorontwikkeling en nieuwbouw van de Magento platformen van meerdere opdrachtgevers volgens Agile/Scrum. Denk hierbij aan nieuwe functionaliteiten, UX en koppelingen met verschillende back-end systemen. Als ervaren developer zul je hiernaast ook andere developers assisteren en waar nodig de leiding nemen in het project.

Bekijk vacature »

Full stack developer

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 »

.NET developer

Functie Als ervaren .NET ontwikkelaar start jij in één van onze vier scrumteams. Met 30 ontwikkelaars werk jij aan de doorontwikkeling van ons core product. Ook werkt jouw team aan maatwerkoplossingen op aanvraag van de klant en op projectbasis. Wij vinden het erg belangrijk dat onze ontwikkelaars met plezier naar werk gaan. Een deel hiervan ligt uiteraard bij jezelf, als jij ontwikkelen niet leuk vindt, ben jij bij ons echt aan het verkeerde adres. Jouw team bestaat namelijk uit een groep gepassioneerde vakidioten die dit werk doen omdat dit eerst een hobby was! Daarnaast wordt er intern rekening gehouden met

Bekijk vacature »

Front-end Developer

Functie omschrijving Wij zijn op zoek naar een Front-end Developer! Als Front-end Developer binnen dit softwarebedrijf ga je de frontends voor zowel je eigen interne projecten als die voor klanten opzetten, onderhouden en uitbreiden. Je zet ideeën om naar mooie successen voor de klanten. Dat is in een notendop wat je gaat doen! Wat kun je verwachten? Je werkt aan de doorontwikkeling van bestaande maatwerkapplicaties. Bijvoorbeeld wanneer de klant de applicatie wil uitbreiden met een nieuwe feature; Samen met het team van backenders en desginers zet je nieuwe ideeën van klanten om naar mooie oplossingen; Je werkt met verschillende frameworks.

Bekijk vacature »

(Lead) PHP Software Developer

Functie omschrijving Voor een klein softwarebedrijf in Breda, zijn wij op zoek naar een PHP software developer met een aantal jaar werkervaring. Je krijgt een plek in een klein team met 2 andere software developers. Wil jij graag werken met de nieuwste technieken bij een bedrijf waar jij de lead gaat nemen in de verder ontwikkeling en modernisering van een eigen software pakket? Dan ben je hier aan het juiste adres! Jouw werkzaamheden gaan er als volgt uit zien: Je gaat aan de slag met de ontwikkeling en vernieuwing van het "in-house" ontwikkelde multimedia platform. Je neemt de lead in

Bekijk vacature »

Back-end Developer

Functieomschrijving Voor een erkende werkgever in de regio van Middelburg zijn wij op zoek naar een enthousiaste PHP / Symfony Developer. Een ambitieus persoon die het gemotiveerde development team komt versterken met het realiseren van nieuwe en complexe projecten. Ben jij op zoek naar een baan met veel uitdaging binnen een snelgroeiend e-commerce bedrijf, waar je de tijd en ruimte krijgt voor professionele groei? Dit ga je doen: Je bent verantwoordelijk voor de beheer en ontwikkeling van de serviceportal in Symfony en de webshops in de tweede versie van Magento; Je houdt je bezig met het ontwikkelen van nieuwe functionaliteiten;

Bekijk vacature »

Junior Front end developer Onderwijssoftware

Functie Als Junior front end developer kom jij terecht in een klein, maar hecht team bestaande uit 5 andere developers (waarvan 2 senioren, 2 medior en 1 junior). Met de gezamenlijke missie om “ieder kind te helpen met onze software” wordt er dagelijks gepassioneerd en hard gewerkt aan ons in-house ontwikkeld platform. Deze software is gebaseerd is op AI, machine Learning en wetenschappelijke inzichten. Dagelijks zul jij werken met onze high traffic webapplicatie. We hebben ruim 300.00 gebruikers en meer dan 2 miljard records waar je te maken mee krijgt! Verder zul jij je bezighouden met: – Het ontwikkelen van

Bekijk vacature »

Senior Node.js developer Digital Agency

Functie Door de groei van de organisatie zijn ze op zoek naar een Tech Lead. Als tech lead ben jij verantwoordelijk Als Back end Node.js developer kom je terecht in een van de 8 multidisciplinaire teams in het projectenhuis. Afhankelijk van jouw interesses, wensen en capaciteiten word je bij projecten en onderwerpen naar keuze betrokken. Als ervaren ontwikkelaar zul jij vaak leiding nemen in de projecten en in het team een aanvoerder zijn van technische discussies. Uiteindelijk wil jij natuurlijk de klantwensen zo goed mogelijk vertalen naar robuuste code. De projecten kunnen varieren van langlopende- tot kleinschalige trajecten. Voorheen werkte

Bekijk vacature »

Pagina: « vorige 1 2

Wouter J

Wouter J

09/02/2014 21:57:44
Quote Anchor link
De DataMapper maakt een object aan die die teruggeeft, bedoelde je dat met "door sturen naar waar ik het nodig heb"?

En het mooie is, met dit design is je datamapper een repository geworden. Hij interact niet meteen met de database, maar met de layer die met de database interact: http://code.tutsplus.com/tutorials/the-repository-design-pattern--net-35804
 
PHP hulp

PHP hulp

27/11/2024 20:09:50
 
Milo S

Milo S

09/02/2014 22:02:41
Quote Anchor link
Ja, dat is precies wat ik bedoel. Raad jij trouwens aan om dan ook een soort van container method te maken? Voor als je met een UserMapper zit je ook meerdere gebruikers kunt selecteren.

Oh God, het beestje heeft een naampje! Ik ga kijken!
 
Wouter J

Wouter J

09/02/2014 22:13:53
Quote Anchor link
Het mooie van een UserMapper is juist dat het ook meerdere objecten kan selecteren van hetzelfde type. Een methode als findAll zal dan een array terug geven van die onjecten.
 
Milo S

Milo S

10/02/2014 08:47:40
Quote Anchor link
Ik moet nu helaas op weg naar mijn andere hobby / werk dus kan niets proberen / schematisch neerknallen, maar ik ga vanavond wat proberen en de uitkomst laat ik zeker weten. Ben namelijk altijd opzoek naar verbeterpunten.

Offtopic:
Iemand enig idee waarom ik continue op alle verschillende mediums opnieuw in moet loggen?


Toevoeging op 10/02/2014 18:18:41:
Hmm na enige discussies met mijzelf ben ik hierop gekomen. Ik zat vooral met of ik nu wel of niet een extra method moest maken voor bijvoorbeeld gebruiker ophalen met het ID. Gekozen voor wel.

Class: UserMapper
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
<?php
public function getAll( $aColumns )
{

    $sColumns = implode(', ', $aColumns);
    
    $sql = "SELECT
                "
.$sColumns."
            FROM
                "
.$this->table;    
    
    # DatabaseStorage aanroepen
    $DatabaseStorage = new DatabaseStorage($db);
            
    # Alle ophalen
    $UserData = $DatabaseStorage->read( $sql );
    
    # User objecten maken
    foreach( $UserData as $User )
    {

        $User = new User( $User[$aColumns[0]], $User[$aColumns[1]], $User[$aColumns[2]], $User[$aColumns[3]], $User[$aColumns[4]], $User[$aColumns[5]] );
    }

    
return 'Gelukt? Ja of Nee.';
}

?>


Class: DatabaseStorage
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
<?php
public function read( $sql )
{
        
    # Query Interpreteren en Controleren door Database
    $stmt = $this->db->prepare($sql);
    
    # Query Uitvoeren
    $stmt->execute();
    
    # Result Opvangen en Retouneren
    return $result = $stmt->fetch(PDO::FETCH_ASSOC);
}


?>


Aanroepen van:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
# UserMapper aanroepen
$UserMapper = new UserMapper($db);

$aColumns = array ( 'username', 'password', 'name', 'email', 'phone' );

# Alle gebruikers ophalen
$User = $UserMapper->getAll($aColumns);


In theorie moet dit verhaal werken, ik heb het nog niet geprobeerd, ga ik nu doen! Maar ik zit sowieso met het feit dat niet direct zie welke waardes ik waar in het User object stop. Dat kan natuurlijk ongelooflijk de verkeerde kant op gaan?

Wat erg apart is, dat hij nu bij het testen blijft zeuren over dat de variable $db niet is gedefinieerd. Punt is, dat is hij wel...
Gewijzigd op 10/02/2014 18:39:37 door Milo S
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

10/02/2014 19:14:23
Quote Anchor link
$this->db wellicht?
 
Milo S

Milo S

10/02/2014 22:01:01
Quote Anchor link
Gek genoeg had ik dat dus in mijn code al opgemerkt en aangepast...

Inmiddels werkt het, behalve het db gebeuren, maar daar kijken we morgen wel naar. Wat ik wel ook nog wil vragen is of dat dit wat ik morgen even erbij zet iets is wat jullie zouden doen?

En foutafhandeling / bevestiging van goedkeuring hoe kun je dat het beste aanpakken. Ik zou natuurlijk een aparte ExceptionHandler bouwen waarmee ik beide dmv numerieke waardes op een gewenste manier kan tonen? Klinkt dat als wenselijk voor jullie? Of denken jullie erheel anders over
Gewijzigd op 10/02/2014 23:09:36 door Milo S
 
Wouter J

Wouter J

10/02/2014 23:24:19
Quote Anchor link
Naar mijn idee zijn er een paar dingen mis met je huidige DataMapper:

Er is maar 1 klasse (1 plek eigenlijk) in je hele code die weet hoe de user database tabel en het User object aan elkaar gekoppeld zijn. Sterker nog, er is maar 1 klasse die überhaupt weet dat het User object in een database tabel wordt opgeslagen.
De rest van de objecten weet of alleen dat er een user database tabel is en welke waardes die bevat of dat er een User object is en hoe je die gebruikt (let op, alleen een factory weet hoe je een User object aanmaakt). De grote meerderheid zou niks van de database af weten, eigenlijk weet alleen de DatabaseStorage klasse daar vanaf.

In jouw UserMapper heb je een getAll method die kolommen accepteert. Die moet dus door een ander object worden aangeroepen met de database kolommen. Nu heb jij dus een willekeurig ander object die ineens de kolommen weet en je hebt een UserMapper die die kolommen niet weet. Dat is een beetje vaag, vind je ook niet?

Deze UserMapper maakt zelf zijn DatabaseStorage klasse aan. Hier zijn 2 grote problemen mee:
- Je bent alle flexibiliteit kwijt. Wanneer je van database naar file wil veranderen moet je je klassen niet hoeven aanpassen. In jouw geval moet je alle DataMapper klassen aanpassen.
- Per DataMapper wordt er weer een nieuwe DatabaseStorage aangemaakt, 1tje zou veel beter zijn, niet?

Wat je dus doet is de Storage klasse buiten de DataMapper aanmaken en die vervolgens meegeven aan de DataMapper's constructor (ipv $db).

Dan nog een naam dingetje, ->find of ->findAll is wat gebruikelijker dan ->get en ->getAll in DataMappers. Maar dit kan natuurlijk ook volkomen persoonlijke smaak zijn.
 
Milo S

Milo S

11/02/2014 08:55:54
Quote Anchor link
Ik heb de DatabaseStorage nu buiten de DataMapper aan laten maken, maar vraag me af of ik begrijp wat je bedoeld met het aanpassen van alle DataMappers.

Om dat te voorkomen moet ik dus de SQL String gewoon aanmaken bij de pagina die wordt getoont. Op deze manier gaat er een query mee naar de DataMapper getAll method zodat die daarna alles op kan vragen aan de databaseStorage.
Op deze manier kan ik heel makkelijk zeggen ik wil geen databaseStorage meer maar bijvoorbeeld txtStorage. Ik hoef dan alleen maar een andere storage classe mee te geven bij het oproepen?

Correct? Duidelijk Verwoord?

Class UserMapper
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
<?php
public function __construct( $Storage )
{

    $this->storage = $Storage;
}

public function getAll( $sql )
{
                
    # Data opvragen uit storage
    $UserData = $this->storage->read( $sql );        
    
    # Result Opvangen en in User object plaatsen
    for( $i = 0; $i <= ( count( $UserData ) - 1); $i++ )
    {

        $User[] = new User( $UserData[$i]['id'], $UserData[$i]['username'], $UserData[$i]['name'], $UserData[$i]['phone'], $UserData[$i]['email'] );
    }

        
# Array retouneren
return $User;
}

?>


Class DatabaseStorage
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
public function read( $sql )
{
        
    # Query Interpreteren en Controleren door Database
    $stmt = $this->db->prepare($sql);
    
    # Query Uitvoeren
    $stmt->execute();
    
    # Result Opvangen en Retouneren
    while( $result = $stmt->fetch( PDO::FETCH_ASSOC ) )
    {

        $res[] = $result;    
    }

    
return $res;
}

?>
Gewijzigd op 11/02/2014 08:57:02 door Milo S
 
Milo S

Milo S

12/02/2014 19:26:27
Quote Anchor link
Inmiddels is het mij ook gelukt om data toe te voegen via de huidige gedachtegang en draait eigenlijk alles wel soepel.
Ik kom er alleen wel achter dat ik steeds minder methods nodig heb.

Alles wat ik nu nog heb is een save, findById, FindAll method in mijn Mappers en create, read, update en delete in mijn Storage class. En zelf daar zou eigenlijk de update weg kunnen, hij is namelijk praktisch hetzelfde als create.

Wat denken jullie ervan?
 
Wouter J

Wouter J

12/02/2014 19:43:14
Quote Anchor link
Nou, je begrijp er nog niet veel van (wat betreft het query verhaal). Nu moet een klasse buiten de DataMapper dus een query gaan maken. Dat betekend dat de klasse buiten de DataMapper moet weten in welke tabel het User object zich bevindt en wat voor kolommen deze tabel heeft. Dat is allemaal de taak van de DataMapper. Maak een query in de datamapper en geef die door aan de DatabaseStorage. Op die manier kun je makkelijk die DatabaseStorage veranderen in een FileStorage, door alleen de DataMapper aan te passen.

En je bent type hinting vergeten voor Storage.
Gewijzigd op 12/02/2014 19:43:40 door Wouter J
 
Milo S

Milo S

12/02/2014 22:12:50
Quote Anchor link
Maar verrek dat had ik?

Ik ga het even op een rij zetten voordat ik weer heel enthousiast ga programmeren... Ik baseer het verhaal even op het gebruikersgedeelte. Hiermee kan ik dan het principe onder de knie krijgen om dan vervolgens de rest aan te pakken.

UserMapper
- create( $_POST )
- getAll()
- getById( $iId )
- update( $_POST )
- delete()
- populate()

In de eerste 5 methods wordt een query gemaakt. De Query wordt doorgestuurd naar de DatabaseStorage. Mocht ik dan een FileStorage willen, dan maak ik een nieuwe UserMaper of pas ik deze aan zodat hij de juiste gegevens stuurt naar de FileStorage.
In mijn getAll & getById methods roep ik een populate / factory (hoe je het ook noemen wilt) method aan om het user object aan te maken zodat ik deze uiteindelijk kan retourneren naar de pagina waarop ik het weergeven wil.

DatabaseStorage
- save( $sSql )
- read( $sSql )
- delete( $sSql )

De DatabaseStorage ontvangt de SQL code van de Usermapper. Hij voert de code uit en retourneert het naar de UserMapper.
Ik ben het alleen niet zo eens met een gescheiden save method, dus ene create en update apart. Het doet werkelijk precies hetzelfde. Vandaar dat ik er voor kies om een save method te gebruiken voor beide.

Zeg me alstublieft dat ik het dan nu eindelijk door heb...
Gewijzigd op 12/02/2014 22:31:52 door Milo S
 
Wouter J

Wouter J

12/02/2014 22:35:01
Quote Anchor link
Ja, dat klopt :) Je code voorbeeld toonde: public function getAll( $sql ) in de usermapper. Dat was dus verkeerd, wat je hierboven schreef is correct!
 
Milo S

Milo S

12/02/2014 23:03:10
Quote Anchor link
God dank haha! Ik heb je niet een na laatste post maar die daarvoor geloof ik wel 20 keer gelezen en ik maar niet begrijpen wat je nu bedoelde. Ben superblij dat het nu eindelijk iets gaat worden haha.
 

Pagina: « vorige 1 2



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.