[OOP] CRUD method's

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Low-code developer

Functie omschrijving Heb jij altijd al een training willen volgen in het buitenland? Voor een leuke opdrachtgever in omgeving Alphen ad Rijn zijn wij op zoek naar kandidaten die aan de slag willen als Low Code Developer! Beschik jij over HBO/WO nivo, bij voorkeur Informatica, maar een ander technische opleiding zoals bijv. wiskunde, natuurkunde is ook goed. Heb jij aantoonbare affiniteit met IT en ben jij gedreven, enthousiast, communicatief vaardig en klantgericht? Lees dan snel verder! Je wordt getraind tot een volwaardig Low Code Developer, het traject ziet er als volgt uit: Start 1e week januari, opleiding van 3 weken

Bekijk vacature »

Senior .NET developer

Functie As a Senior .NET developer you will work in our Research & development team. Our team consists of 17 colleagues! We are currently busy setting up a completely new architecture for a new product. We use VS2022 and .NET 6.0 for our new product. Your function is therefore mainly backend oriented. Since we develop measuring equipment for the chemical industry, it is also very important to develop high-quality software for its control. You are also responsible for designing, implementing and testing new features. For this position its also very important to ensure future-proof and sustainable architecture. Eisen - A

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 »

C#.NET/Unity Developer

Functieomschrijving Voor een gewaardeerde werkgever in de omgeving van Breda zijn wij op zoek naar een software ontwikkelaar. Dit bedrijf houdt zich bezig met de ontwikkeling van WMS Software (C#/Unity & SQL). Past dit bij jou? Lees snel verder! Jouw werkzaamheden zullen er als volgt uitzien: Je werkt aan innovatieve softwareoplossingen voor het verbeteren en/of vernieuwen van processen; Samen met 6 applicatieontwikkelaars hebben jullie de verantwoordelijkheid voor de uitbreiding en ontwikkeling van de webapplicaties; Het uitvoeren van updates/aanpassingen aan de huidig draaiende applicaties; Je bent een luisterend oor naar klanten en vertaalt hun wensen door naar bruikbare software. Bedrijfsprofiel Wie

Bekijk vacature »

Front end developer

Functie Qua type opdrachten is er echt een verscheidenheid aan afnemers, zo werken ze met grote multinationals, maar ook met startups. Zo kom je te werken in een gevarieerde omgeving en kan je ook schakelen tussen verschillende culturen. De projecten variëren van greenfield projecten tot langdurige ontwikkeltrajecten. Hier wordt alleen maar gewerkt met aan front end projecten. Daarom maakt het onze partner niet uit waar jij kennis van hebt, als je maar gedegen kennis hebt van Javascript frameworks, Unit testing en ook bekend bent met de scrum methodiek. Eisen Minimaal 4 jaar relevante werkervaring Kennen en ervaring van Javascript frameworks

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 »

Back end Node.js developer

Functie Het ontwikkelteam bestaat momenteel uit 5 (back-end) Developers, 2 systeembeheerders, 1 DevOps engineer, 1 Tech Lead en 2 Scrum Masters. Samen wordt er doorontwikkeld aan twee SaaS-platformen die in een hoog tempo doorontwikkeld moeten worden. Omdat innovatie een belangrijk speerpunt binnen de organisatie is, wordt er ook continu naar snellere en slimmere oplossingen te bedenken en realiseren. Als Back-end Developer hou jij je dagelijks bezig met vraagstukken zoals: API-development, high volume datastromen, het ontwikkelen van Bots aan de hand van A.I. Daarnaast denk en werk jij mee aan de onlineapplicaties voor klanten. Er wordt zelfstandig en in teamverband gewerkt

Bekijk vacature »

Software developer - C Sharp

Functie omschrijving Voor een opdrachtgever, met een prachtig kantoor in omgeving Wateringen zijn wij op zoek naar een software ontwikkelaar die graag werkt met C#, JAVA of Oracle. Heb jij interesse in het programmeren en ontwikkelen van software? En heb jij enige ervaring met Oracle databases en PL/SQL? Als software developer werk je met je collega's samen in een leuk en informeel team aan het (her)ontwerpen van bedrijfssystemen. Je houdt je bezig met het ontwikkelen van REST API's en je onderhoudt applicaties in Oracle PL/SQL en APEX. Vind jij het leuk om in een Agile/Scrum omgeving te werken? Wil jij

Bekijk vacature »

Senior Front end developer Automotive Angular

Functie Als Senior Front end developer kom je te werken in een team van 11 developers. 9 van de 11 focussen zich op back end, welke is geschreven in Java, en 2 op de front end waarbij er gebruik wordt gemaakt van Typescript en Angular. De focus in deze rol ligt op 2 aspecten; doorontwikkeling van de eigen tooling en gebruik van de tooling t.b.v. klantprojecten. Momenteel zijn ze in de afrondende fase van een project waarbij ze het gehele verkoopproces van nieuwe auto’s anders ingeregeld hebben voor een grote dealer in Nederland. Waarbij Auto’s normaliter pas verkocht werden in

Bekijk vacature »

PHP Developer

Dit ga je doen Je werkt nauw samen met het websitebureau aan de ontwikkeling en optimalisering van het internationale platform; Je ziet nieuwe webshops op en voert optimalisaties door; Je bouwt aan technische, functioneel en commercial resultaat; Je vindt het leuk om zelfstandig binnen een internationale organisatie te werken, maar krijgt ook energie om samen met collega's te werken. Hier ga je werken Voor een bedrijf in de regio Rotterdam zijn wij opzoek naar een PHP Developer. Je wordt onderdeel van het communicatieteam en gaat je bezighouden met het optimaliseren van de website van dit internationale bedrijf. Je schakelt veel

Bekijk vacature »

Mendix Consultant / Developer

Dit ga je doen Het in kaart brengen en analyseren van de functionele wensen van de klant rondom Mendix applicaties; Het fungeren als sparringpartner voor de (interne) klanten; Het opstellen van requirements en het vertalen hiervan naar technische mogelijkheden; Het opstellen van user stories; Het bouwen van de Mendix applicaties in samenwerking met jouw team of zelfstandig; Het testen van op te leveren software en het zorg dragen voor de implementatie; Trainen van gebruikers in het gebruik van de applicatie; Werken in een Agile omgeving. Hier ga je werken De organisatie begeeft zich in de retail branche en focust zich

Bekijk vacature »

Medior PHP developer

Functie Samen met je development team werk je Agile Scrum en met jullie gezamenlijke kennis en ervaring bepalen jullie samen de beste keuze voor techniek en architectuur. 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 denkniveau • Je hebt goede kennis en ervaring met PHP • Je bent niet bang voor complexe projecten • Je werkt graag zelfstandig aan applicaties • Je bent altijd nieuwsgierig naar nieuwe

Bekijk vacature »

PHP Web Developer

Functie omschrijving Voor een klein softwarebedrijf in de omgeving Roosendaal, zijn wij op zoek naar een PHP web developer met een aantal jaar werkervaring. Wil jij graag werken aan in-house software projecten voor diverse klanten? Voel jij je prettige in een klein team developers, waar jouw inbreng enorm gewaardeerd wordt? Lees dan snel verder! Jouw werkzaamheden zien er als volgt uit: Je wordt verantwoordelijk voor de ontwikkeling van diverse applicaties. Dit kan de ene keer een online platform voor aanbiedingen zijn, en de andere keer een software pakket dat gebruikt wordt om interne processen te automatiseren. Het zijn stuk voor

Bekijk vacature »

Junior Outsystems developer

Functie Als junior Outsystems developer wordt jij onderdeel van een multidisciplinair team van 23 software engineers. Ons team werkt agile en termen als Continuous Integration en Continuous Delivery zijn bij ons dagelijkse koek. Wij werken aan uitdagende en afwisselende projecten met als doel onze klanten een totaal oplossing aan te bieden. Als junior Outsystems developer krijg jij bij ons de kans om jezelf te ontwikkelen naar een volwaardige ervaren en gecertificeerde Outsystems developer. Jij een team met ervaren mensen (10+ ervaring) om je heen. Zo heb jij niet het gevoel dat jij meteen in het diepe wordt gegooid en uiteraard

Bekijk vacature »

Software Programmeur PHP - JAVA

Functie Heb jij altijd al willen werken voor een bedrijf, dat veilige netwerkverbindingen levert, door middel van veilige oplossingen, die door middel van de nieuwste technologieën ontwikkelt zijn? Stop dan nu met zoeken! Voor een opdrachtgever in omgeving Moordrecht zijn wij op zoek naar een programmeur. Hoe kan jouw dag er straks uitzien? Je gaat software en webapplicaties ontwikkelen met behulp van de talen C / C++ / PHP. 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

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

01/01/2025 07:10:23
 
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.