[MVC] Model Layer uitgelicht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Angular Frontend Software Developer

De vacature Funle is een startup en een spinoff van Semantica. Funle ontwikkelt een nieuw platform voor zelfstandige IT-professionals waarmee we freelancen weer leuk maken. Samen met het core-team van 3 members ga jij helpen de wereld van de IT-bemiddeling op zijn kop te zetten. We zijn op zoek naar iemand die wil bijdragen aan iets groters dan alleen de code die hij/zij schrijft. Als startup heeft Funle behoefte aan een meedenker, iemand met een mening en de vaardigheid om die mening waar te maken. Als je één keer in je leven een verschil wil maken in de wereld van

Bekijk vacature »

PHP developer

Briljante werken-bij websites voor clubs als ABN-AMRO, T-Mobile, KWF Kankerbestrijding en Boskalis. Online recruitmentmarketingcampagnes voor Waterschap Rivierenland, Randstad en VDL Nederland. Dit zijn zomaar een paar van de projecten die we al hebben binnengeharkt. En er kan nog meer bij. Welke projecten oogst jij als PHP developer bij Getnoticed? Als PHP developer bij Getnoticed werk je in een team met acht directe collega’s. Bij ons geen hiërarchie of weken beslissingstijd. Dit betekent korte lijnen en snel schakelen. Dat is ook wel nodig bij alle innovatieve projecten waar we tegelijkertijd aan werken, zoals Google Cloud Talent Solution. Jouw functie bij Getnoticed

Bekijk vacature »

PHP Developer (medior)

Als PHP developer werk jij mee aan de uitbreiding van onze SaaS applicatie. Je bouwt aan nieuwe functionaliteiten, verbetert ons Content Management Systeem op basis van Symfony en optimaliseert de gebruiksvriendelijkheid. Je werkt aan een mooi product dat continu uitgebreid wordt en de potentie heeft om de wereld over te nemen! Naast het meewerken aan de uitbreiding van onze SaaS applicatie, werk je ook aan specifieke modules voor onze klanten. Klanten als Scania, Fletcher Hotels, Gamma of Aditech hebben jouw hulp nodig! Wil jij meewerken om onze ambitie waar te maken? We bieden: Een salaris tussen € 2200 en €

Bekijk vacature »

Systeembeheerder Azure

Opleidingsbudget van € 5.000,- Onze opdrachtgevers werken met de nieuwste technieken dus onze medewerkers ook. Daarom bieden we jou uitgebreide opleidingsmogelijkheden en ondersteunen we je maximaal in je ontwikkeling. We bepalen samen met jou een opleidingstraject want niemand wil stilstaan in zijn ontwikkeling, zeker niet in de IT. Wat mag je nog meer verwachten? Direct een arbeidsovereenkomst voor onbepaalde tijd Een salaris tussen de € 3.500,- en € 4.500,- bruto per maand o.b.v. 40 uur Diverse bonussen: - 1800+ uur bonus - Wervingsbonus, een waardebon naar keus, ter waarde van € 1.500,- netto Een onkostenvergoeding van € 100,- netto per

Bekijk vacature »

Umbraco Developer @ Regio Den Haag

2021-10-06 iSense Umbraco Developer Ben jij een ervaren Full stack developer met ruime ervaring binnen een CMS systeem? En heb je ervaring met full stack development binnen een Microsoft omgeving? Lees dan snel verder! ISBA49656 Nieuw Organisatie Voor een semi-overheidsorganisatie in de regio Den Haag zijn we opzoek naar een ervaren Developer, die kennis heeft of wilt ontwikkeling op Umbraco vlak. Je zal verantwoordelijk worden voor het ontwikkelen van het huidige platforms en nieuwe web-omgevingen. Als developer binnen dit team ga je zorg dragen voor het ontwikkelen door middel van onder meer C# en Azure. Ook ontwikkel je koppelingen met

Bekijk vacature »

Java/ Cloud developer @ Amsterdam

2021-11-17 iSense Java/ Cloud developer Do you like DevOps way of working? Are you looking for an exciting opportunity where latest and greatest technologies are applied to solve everyday problems? Would you like to take responsibility in each and every step of software development lifecycle and be a part of a team that create services for the external users? Apply now!!! ISAA51764 Organization You will work in a global financial organization with a head office in the Netherlands. You will be part of one of the most important department which is the payments environment. The organization has a very strong

Bekijk vacature »

Service Assurance Manager

Service Assurance Manager Categorie: Project Management Regio/Locatie: Rotterdam, Zuid-Holland, Netherlands Vacaturenummer: J1021-4160 Type dienstverband: Full Time Functiebeschrijving: Als Service Assurance Manager werk je als Consultant voor een van onze klanten in de Oil & Gas industrie. Je bent de adviseur voor enerzijds de projectmanager en anderzijds de beheerorganisatie. En je borgt dat de door het project opgeleverde functionaliteit goed landt in de beheerorganisatie. Wat ga je doen? Het service assurance proces heeft als doel om op gestandaardiseerde wijze bij te dragen aan een betrouwbare, veilige en betaalbare support- en beheeromgeving. Jouw verantwoordelijkheden: • Het inregelen van de transitie naar support-

Bekijk vacature »

Senior C# developer

Samen met het development team zorg je ervoor dat alle systemen achter de schermen vlekkeloos werken. Wat doe je als Senior C# developer bij Coolblue? Als C# developer doe je regelmatig mee aan brainstormsessies over user experience, data en task flow met de UX Designer, Product Owner en Data Scientist in je team. Daarnaast schrijf je op zichzelf staande, consistente en testbare code die goed onderhoudbaar en toekomstbestendig is. Ook C# developer worden bij Coolblue? Lees hieronder of het bij je past. Dit vind je leuk om te doen Werken met verschillende soorten data-opslag, zoals Oracle of AWS. Problemen oplossen

Bekijk vacature »

Business Developer Credit Risk

Senior Business Developer Team Delivery Incasso2020 programma Het succesvol Live brengen van een eerste MVP in Q1 2022 met het Agile/Scrum team: jij bent in de driver seat, de PO ondersteunt waar nodig Requirements en acceptatie criteria voor volgende incrementen opstellen zodat ook de backlog items na Go-Live helder zijn voor het Agile/Scrum team Overdracht van opgedane kennis en werkzaamheden naar een vaste kracht Functie-eisen Een afgeronde HBO/WO opleiding Ervaring binnen de bancaire sector Heeft ervaring met E2E IT implementatie in een Agile Way of Working Is in staat om zich snel in een nieuw onderwerp te verdiepen en/of heeft

Bekijk vacature »

Junior Fullstack JAVA developer @ Regio Eindhoven

2021-10-17 iSense Junior Fullstack JAVA developer Heb je onlangs een hbo-, wo-opleiding of een minor richting de IT afgerond en wil je graag aan de slag als Fullstack JAVA Developer? Lees dan snel verder! Want in februari 2022 start de Experis Academy weer met een leerprogramma waarin IT-experts je opleiden tot developer met als specialisatie JAVA. Dit allemaal met een salaris en een vooruitzicht op een baan bij een topwerkgever. ISNA51135 Wat ga je doen tijdens het Fullstack JAVA ontwikkeltraject? Vanaf februari 2022 krijg jij via de Experis Academy een unieke kans om jouw IT-carrière een kickstart te geven en

Bekijk vacature »

Senior Front-End Developer

As a Senior Front-end Developer you maintain the balance between creativity and functionality for our webshop, and you coach your fellow developers. How do I become a Senior Front-End Developer at Coolblue? As a Front-end Developer you work on the user-friendliness of our webshop for millions of customers. You enjoy working with the UX Designer to pick up stories. You get energy from coming up with creative solutions and are happy to present this within the team. You are also proud of your work and welcome all feedback. Would you also like to become a Front-End Developer at Coolblue? Read

Bekijk vacature »

front-end developer @ Amsterdam

2021-11-15 iSense front-end developer Ben jij een gedreven Front-End ontwikkelaar en vind je het tof om een bijdrage te leveren aan het inzichtelijk maken van data en ervoor te zorgen dat de businesswaarde hierdoor gemaximaliseerd wordt? Lees dan snel verder! ISVI51733 Organisatie De organisatie is een toonaangevend bedrijf met een focus op innovatie op het gebied van Cloud platformen, Security en AI-oplossingen. Binnen de organisatie wordt persoonlijke groei gestimuleerd en zorg je er samen met jouw team voor dat opdrachtgevers, verwijderaars, eindinspecteurs en toezichthouders over eenduidige informatie beschikken. Als Front-End Ontwikkelaar zal verantwoordelijk zijn voor het ontwikkelen en/of verbeteren van

Bekijk vacature »

Boer zoekt Machine Learning Developer

Bedrijfsomschrijving Dit bijzondere bedrijf uit de regio Nijmegen ontwikkelt applicaties waar wereldwijd boerenbedrijven hun bedrijf mee ondersteunen. Van kleine sympathieke bio-bedrijfjes tot hele mooie grote professionele boerenbedrijven die al jaren gerund worden door dezelfde familie's. We hebben bij dit mooie bedrijf een vacature ervaren Machine Learning expert die toe is aan een nieuwe uitdaging. Ze doen dit voor bedrijven in ons eigen land en tot ver daarbuiten. Er zijn internationale kansen die ze niet voorbij laten gaan en binnen hun sector is het op IT vlak een top-speler. Men richt zich op het moment bijvoorbeeld op Nieuw-Zeeland en ook in

Bekijk vacature »

IT-traineeship Low Code Developer

Vind jij het leuk om veel contact te hebben met een klant en je te verdiepen in een domein? Lijkt het je interessant om enerzijds met de klant mee te denken, maar tegelijkertijd ook zelf een bijdrage te leveren aan de implementatie van een IT oplossing? Wij zijn op zoek naar starters die aan de slag willen als low-code engineer. In deze functie bouw je aan applicaties met behulp van een low-code platform, zoals Outsystems, Blueriq, Mendix of Pega. Dergelijke platformen stellen je in staat om snel een werkende applicatie te ontwikkelen en zijn hierdoor heel geschikt voor maatwerk projecten.

Bekijk vacature »

DevOps - Well Funded Scale Up - Expanding a DevOps

Do you want the autonomy to build a DevOps function in your own image? You’ll be coming into a Scale-Up with a view of taking a hands-on approach to building the DevOps function for the entire business. You’ll have one direct report, but don’t worry, the managerial side is left to the CTO. You’ll help this individual grow and develop to support you. Your primary focus will be to look at “as is” and how you can build on this to further enhance the services offered to both customers (internal and external) through upgrades or new technologies. Here’s why you

Bekijk vacature »
Jasper DS

Jasper DS

23/01/2013 12:22:51
Quote Anchor link
Hallo iedereen,

ik heb de voorbije dagen erg veel gelezen over het MVC-pattern, een ORM en het datamapper-pattern.
de VC van het MVC is voor mij nu vrij duidelijk. Ik heb een eigen interpretatie gemaakt die waarschijnlijk nog wel een pak beter kan maar het volstaat voor wat ik nu wil doen.

Dan schiet er nog de model over. Ik heb hier op het forum geleerd dat je de database / storage moet benaderen vanuit een mapper en een Domain object. Dit topic op stackoverflow ging er nog een beetje dieper op in en voegde aan deze twee elementen nog "de model" toe.

De model layer bestaat dus uit:
  • Domain object
  • Mapper
  • Model
  • StorageClass


Het domain object is vrij duidelijk, het houd de data vast en controleert of de data aan het juiste type voldoet. Het domain object is niet verantwoordelijk voor de storage van de data.

De mapper is de verbinding tussen het domain object en de storage. In de mapper staat geen SQL, de mapper spreekt enkel de juiste storage classe aan die op zijn beurt de rest van het werk doet.

Model zorgt ervoor dat er geen logica in de controller komt.

Je zou dus kunnen zeggen dat de model en mapper er zo uit zien:
Model
  • getAll()
  • getTopFive()
  • getRow()
  • save()

Mapper
  • select()
  • update()
  • delete()


Maar is de mapper en de model eigenlijk niet gewoon hetzelfde en kan je deze niet samenvoegen tot één classe?

Maar achtergrond informatie over mijn manier van denken vind je in deze PDF

Bedankt voor het lezen!
Gewijzigd op 23/01/2013 12:23:07 door Jasper DS
 
PHP hulp

PHP hulp

29/11/2021 15:29:02
 
Wouter J

Wouter J

23/01/2013 13:57:22
Quote Anchor link
Lees eens deze mooie minitut van Niels over models, mappers en meer in het MVC pattern: http://www.phphulp.nl/php/forum/topic/oop-gedachtengang/85017/3/#609065
 
Erwin H

Erwin H

23/01/2013 14:22:47
Quote Anchor link
Ik heb die tut van Niels niet doorgelezen, dus mogelijk dat ik iets dubbels zeg, bij voorbaat excuses dan.

Maar mijn antwoord op de vraag of de mapper en het model niet samen gevoegd zouden kunnen worden is het volgende.
Kan je je een situatie voorstellen waarin je het ene wel wil aanpassen en het andere niet? Zo ja, dan zou ik het gescheiden houden. In dit specifieke geval kan ik me bijvoorbeeld voorstellen dat je voor een applicatie een normale relationele database gebruikt. MySQL, Oracle, MSSQL, DB2, whatever. Volgend jaar echter krijg je de geest en wil je veranderen naar een nosql database. Op zich kan daarmee je hele applicatie gelijk blijven, alleen de manier waarop je de data in de backend verwerkt wordt anders. In mijn ogen blijven de functies zoals je die in het model hebt gedefinieerd dan gelijk, maar de implementatie van de mapper zal anders worden.

Bovenstaand voorbeeld is wellicht niet van toepassing op jou. Probeer dan een situatie voor jezelf te schetsen waarbij je wel de een wilt veranderen en de ander niet. Kan je zo'n situatie werkelijk niet bedenken, dan kan je waarschijnlijk de twee samenvoegen.



P.S. bovenstaande denkwijze geldt natuurlijk niet alleen voor dit deel van een applicatie, maar voor alle onderdelen. Het is in feite mijn grondbeginsel voor het aanmaken van een nieuw object of niet.
 
Jasper DS

Jasper DS

24/01/2013 17:30:23
Quote Anchor link
Wouter J op 23/01/2013 13:57:22:
Lees eens deze mooie minitut van Niels over models, mappers en meer in het MVC pattern: http://www.phphulp.nl/php/forum/topic/oop-gedachtengang/85017/3/#609065

Ook die reactie heb ik al tientallen keren doorgenomen alle paterns opgezocht etc. Ik vind dat Gateway-pattern wel interessant maar weet nog niet hoe ik dat moet implementeren.

Erwin H:
Ik heb die tut van Niels niet doorgelezen, dus mogelijk dat ik iets dubbels zeg, bij voorbaat excuses dan.
...

Hoi Erwin,

ik ben wel van plan om meerder storage types te ondersteunen. Dus dat ik eigenlijk als ik een nieuwe storage toevoeg (Json, Mysql, MSSql) dat ik eigenlijk enkel de storage classe (lees adapter(?)) hoef aan te passen. Maar om dat te bereiken kan ik de mapper en de model nog steeds samenvoegen hé?

Ik dacht dat de regel was dat een mapper enkel Crud methodes kon bevatten ofzo? Indien dat het geval was kon de mapper eigenlijk voor eender welk object gebruikt worden niet?
 
Wouter J

Wouter J

24/01/2013 17:34:40
Quote Anchor link
Quote:
Dus dat ik eigenlijk als ik een nieuwe storage toevoeg (Json, Mysql, MSSql) dat ik eigenlijk enkel de storage classe (lees adapter(?)) hoef aan te passen. Maar om dat te bereiken kan ik de mapper en de model nog steeds samenvoegen hé?

Ja, jij hebt ooit de database abstractie layer nog 1 klasse opgeschoven en in Storage klassen ondergebracht. Erwin plaats die Database Abstractie in de Mapper. Nu wordt bij jou de Model slechts alleen een wrapper die zijn functies naar een directe Mapper equivalent stuurt, wat natuurlijk volstrekt zinloos is.

Quote:
Ik dacht dat de regel was dat een mapper enkel Crud methodes kon bevatten ofzo?

Nee, we hebben (jij hebt) ooit een MapperInterface gemaakt die ervoor zorgt dat we tenminste toegang hebben tot de 4 crud methods. Maar je kan zoveel methods erin doen als je wilt, getById; getByName, ect.
 
Jasper DS

Jasper DS

24/01/2013 20:28:56
Quote Anchor link
oké mooi, dan denk dat ik in mijn geval de mapper of de model kan schrappen (kwestie van naamgeving). Ik kan de mapper dan alle functies geven die ik denk te gebruiken.
 
Jasper DS

Jasper DS

27/01/2013 11:33:07
Quote Anchor link
Ik heb momenteel toch een aparte model en mapper. De mapper bevat select(), update(), delete() en de model bevat getAll(), getById(), getByCat(). De functies uit de model spreken een functie aan uit de mapper. getAll() ziet er bijvoorbeeld zo uit:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
<?php
public function getAll()
{

    $articleMapper = new ArticleMapper($this->getStorage());
    $articles = $articleMapper->find(array('id', 'name', 'discription'));
    return $articles;
}

?>


In de controller word de model aangeroepen met de specifieke functies, nooit de mapper.

Lijkt jullie dat oke?
 
Wouter J

Wouter J

27/01/2013 13:14:11
Quote Anchor link
Het mag, het lijkt mij alleen een extra laag vol met onnodige moeilijkheid. Een principe dat hier dan vaak genoemd wordt is KISS - Keep It Simple Stupid.

Tevens is regel 4 natuurlijk uit den boze, hiervoor moet je dependency injection gebruiken.
 



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.