[MVC] Model Layer uitgelicht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack .Net Ontwikkelaar - Regio Rotterdam

Heb jij ervaring met applicatie ontwikkeling, testen en onderhoud van business-kritische .NET applicaties? Wil je graag het verschil maken voor onze projecten bij de Nederlandse overheid, sociale zekerheid en gezondheidszorg? En wil je deel uitmaken van een zeer succesvol team? Wat ga je doen? Als ervaren Full Stack .NET Software Developer ga je werken in een team dat zich bezighoudt met het opnieuw bouwen van bestaande en nieuwe toepassingen met een belangrijke maatschappelijke relevantie waarbij digitale toegankelijkheid, security en informatiebeveiliging belangrijke aandachtspunten zijn. Samen ben je verantwoordelijk voor het realiseren en opleveren van de door de product owner gevraagde functionaliteiten.

Bekijk vacature »

BI Developer/ Power BI

Bedrijfsomschrijving De organisatie staat aan het begin van een grote verandering op gebied van Data Analytics. De visie is om datadriven te werken en dat uit te rollen over meerdere zuster/ dochter organisaties in Nederland. De omgeving is volledig Microsoft gebaseerd. In een team van uiteindelijk 8 professionals ben je verantwoordelijk om de omgeving naar een nieuw niveau te tillen op gebied van BI. Dit houdt in dat je de huidige omgeving analyseert en met elkaar bepaalt welke kant de organisatie op moet. Je kan het bijna typeren als een greenfieldproject! Je hebt contact met Business Analisten om requirements te

Bekijk vacature »

Java Developer - Publieke veilgheid

Wil jij als Java developer meewerken aan innovatieve en complexe applicaties? CGI zoekt Java Developers die mee willen werken aan oplossingen voor complexe & maatschappelijk relevante vraagstukken waar de het domein Publieke Veiligheid (o.a. Justitie en politie) voor staat. Wat verwachten we van een Java Developer? Enthousiasme en de wil om je als Java Developer continue te ontwikkelen. Je vindt het leuk om toffe Java oplossingen uit te werken. Je volgt de laatste trends op de voet en je vindt het leuk te werken met de nieuwste technologie, zoals Quarkus, de sub-atomische Java stack die klaar is voor OpenJDK HotSpot

Bekijk vacature »

.NET Developer / Azure

Bedrijfsomschrijving Deze organisatie is gevestigd in het hart van Brabant en wordt gezien als de één van de beste .NET development organisaties in de provincie. Dagelijks werk je hier met ruim 40 enthousiaste .NET Developers, verdeeld over 9 Scrum teams, aan zeer complexe backend systemen. De backend systemen staan in het teken van high-intensity en high-availabilitiy en zijn opgebouwd met onder andere: - C#; - ASP.NET MVC / ASP.NET Core; - Microservices Architectuur; - Azure; - WCF. De teams bestaan uit 3-5 ontwikkelaars, 1 of 2 vaste (technisch)testers, 1 informatie analist en een Product Owner. Je zal niet alleen schakelen

Bekijk vacature »

Backend Developer XQuery

Bedrijfsomschrijving Voor een vooruitstrevende organisatie binnen de zorg in Den Haag zijn wij opzoek naar een Back-end Developer die ervaring heeft met XQuery en Vue.JS. Je zal ontwikkelen aan een tof en complex zorgplatform en koppelingen maken met de NoSQL database. Ook het testen en documenteren van de ontwikkelde functionaliteiten behoort tot zijn verantwoordelijkheden. Door COVID zoeken ze iemand die goed in staat in zelfstandig vanuit huis te werken. Functieomschrijving Ben jij een Back-end Developer en heb je ervaring met XQuery, NoSQL-databases, JSON en REST API's? Wil je meewerken aan een grootschalig project binnen een vooruitstrevende zorg omgeving? Reageer dan

Bekijk vacature »

Java Developer - Overheid

Wil jij een bijdrage leveren aan de ontwikkeling van de digitale overheid en de maatschappelijke vraagstukken waar we met elkaar voor staan? Bel of Whatsapp met Mark Hartman via 06 29070400! Als Java ontwikkelaar houd jij je bezig met het realiseren van mooie en innovatieve oplossingen voor de Nederlandse overheid. • Hoe? Het ontwerpen en ontwikkelen met Java in een van onze complexe projecten. • Waarom? Om met jouw code het verschil te maken in het hart van de digitale overheid in Nederland. • Waar? Bij CGI in Rotterdam, dé IT-specialist op het gebied van digitale overheid. • Met wie?

Bekijk vacature »

IT Engineer

Dümmen Orange is the world’s largest breeder and propagator of cut flowers, bulbs, tropical plants, pot plants, bedding plants and perennials. For our IS (Information Services) department in De Lier, we are looking for an IT Engineer. Job objective Our organization grows and flourishes. This results in a fast-changing and, therefore, challenging environment. Our IS department is responsible for all IT systems within Dümmen Orange: their management, implementation and use. An important department within our growing and international organization. As an IT Engineer you have the primary objective to enable the network, servers and other infrastructure elements to achieve the

Bekijk vacature »

Python Developer Data Science

Bedrijfsomschrijving Onze klant biedt financiële dienstverlening aan organisaties binnen de non-profit sector. Hierbij kun je denken aan overheden en instellingen met een maatschappelijk belang. In vergelijking met andere financiële dienstverleners staan zij er bijzonder goed voor. De organisatie heeft een open cultuur met vrij korte lijnen. Daarnaast zijn duurzaamheid en betrouwbaarheid termen die de organisatie kenmerken. Ter uitbreiding van één van de IT teams zijn zij op zoek naar een Python Ontwikkelaar met interesse voor Data Science. Grote hoeveelheden data zijn kenmerkend voor het applicatie landschap, waarbij aan de finance kant hier complexe data, formules en wiskundige berekeningen komen kijken.

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 Dynamo/Cosmos. Problemen oplossen

Bekijk vacature »

PHP Developer

Validaide supports pharmaceutical logistics service providers in transporting valuable and sensitive pharmaceutical products using our data-sharing Capability Platform and data-driven Lane Assessments and Lane SOPs. Especially with the enormous task of global Corona vaccine distribution, saving time to quickly deliver vaccines has never been more important. With Validaide we help to ensure that healthcare products can be delivered to patients around the world in good quality. Pharmaceutical manufacturers and logistics service providers (DSV, Agility, Yusen, Hellmann, etc) use Validaide to assess transportation risk and optimize their transportation and packaging decisions. We enable this by providing a new level of transparency

Bekijk vacature »

.Net ontwikkelaar

Bedrijfsomschrijving Voor onze relatie zijn wij momenteel op zoek naar een .Net Developer die wilt werken aan software die draait op machines wereldwijd. De organisatie produceert software voor applicaties die gebruikt worden in verschillende branches. De software wordt geleverd aan fabrikanten van verschillende robotica en machines. Als .Net ontwikkelaar ben je intern onderdeel van het team wat de applicatie omgevingen ontwikkeld en onderhoud. Deze applicatie omgevingen draaien voor verschillende klanten op verschillende machines en robots. De applicaties zijn verantwoordelijk voor het aansturen en monitoren van de processen, machines en robots. Doordat je intern erg breed georiënteerd bent, ben je echt

Bekijk vacature »

Java developer (medior & senior)

Op zoek naar leuke collega's waarmee je kunt lachen, gave projecten en een ambitieuze werkgever die heel goed voor je zorgt? Aangenaam: Profit4Cloud! Wij zijn nu met 55 collega's en werken sinds 2015 vanuit 5 vestigingen aan mooie projecten met een fijne groep collega's die allemaal maar één ding willen: mooie en slimme software-oplossingen ontwikkelen met de nieuwste technieken. We zijn goed bezig en zijn daarom op zoek naar versterking: Java Software Engineers met ervaring in back-end en front-end software ontwikkeling. Ben jij de Java Software Engineer die enthousiast wordt van mooie projecten waar binnen jij een belangrijke rol speelt?

Bekijk vacature »

Scala Developer Security

Bedrijfsomschrijving Voor een dynamische en snelgroeiende organisatie in Den Haag zijn wij op zoek naar een back-end developer met interesse in security vraagstukken. Deze organisatie richt zich op het ontwikkelen van een online platform waar persoons- en bedrijfsgevoelige informatie veilig kan worden uitgewisselt en opgeslagen. Binnen de organisatie voegt iedereen vanuit zijn eigen expertise iets toe en staat zelfsturing hoog in het vaandel. Zij werken via het domain driven design principe waarbij zij binnen het betreffende domein met alle disciplines sparren over de inrichting van het platform en het oplossen van problemen. Het platform wordt ontwikkeld in Scala binnen een

Bekijk vacature »

Application Developer Tech Lead

We’re Hiring! A UPS Application Developer Tech Lead *REMOTE WORK POSSIBLE FOR THIS ROLE As a Tech Lead Developer at UPS you work on delivering functionality for highly complex IT systems. You collaborate in agile teams and participate in emerging technologies and processes like CI/CD and DevOps to ensure that we meet our objectives effectively and efficiently. Your primary role is to perform full system life cycle activities, e.g. analysis, technical requirements, design, coding, testing and the implementation of software. Working in our Europe development center in Eindhoven means working in an international team with onsite people as well as

Bekijk vacature »

Front-End VueJS Developer

NO Relocation, the Dutch language skill is mandatory! Voor onze klant zijn wij op zoek naar een FrontEnd Developer die bij voorkeur ervaring heeft met het VueJS framework. De functie is ontstaan vanwege succes en omdat onze klant de huidige tech-stack wil professionaliseren - hierbij kunnen zij hulp en ervaring gebruiken van de nieuwe FrontEnd Developer. Bedrijfsomschrijving NO Relocation, the Dutch language skill is mandatory! Onze klant is een welbekende Scale-up binnen de financiële dienstverlening en heeft een maatschappelijk belang en de focus op de particuliere gebruikers! Omschrijving NO Relocation, the Dutch language skill is mandatory! In de rol van

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

13/05/2021 17:06:54
 
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.