[MVC] Model Layer uitgelicht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

C#/Azure developer

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: Medior C#/Azure developers. Ben jij de Medior C# developer die enthousiast wordt van mooie projecten waar binnen jij een belangrijke rol speelt? Dan is Profit4Cloud jouw 'place-to-be'! Als Medior C#

Bekijk vacature »

Senior Java-developer

Functie­omschrijving De Rijksoverheid beschikt over een enorm Java-landschap. Als senior Java-developer bij het Rijks ICT Gilde werk je dan ook aan uitdagende en veelzijdige opdrachten. Je helpt ministeries en uitvoeringsorganisaties succesvol te zijn in het continu ontwikkelen en verbeteren van technische oplossingen. Zo help je de Rijksoverheid om met lef en ondernemerschap slagvaardig te opereren. Applicaties ontwikkelen die direct bijdragen aan het functioneren van Nederland: daar zorg jij voor als senior Java-developer bij het Rijks ICT Gilde (RIG). Of het nou gaat om het fixen van een bug of het maken van een compleet nieuwe applicatie. Met jouw Java-skills draag

Bekijk vacature »

.NET Developer Medicatie / Apotheek

Jij krijgt een kick van het ontwikkelen van complexe software. Voor onze vestiging in Hoogeveen zoeken wij een .NET Developer Medicatie / Apotheek die graag met de laatste Microsoft-tools en -technieken wilt werken, interessant? Jouw baan Je bent verantwoordelijk voor het ontwerpen, ontwikkelen, ondersteunen en onderhouden van de module Medicatie / Logistiek & Apotheek. Je gaat nauw samen werken met zowel interne als externe klant om nieuwe functionaliteiten te ontwikkelen om onze klanten te ondersteunen in hun werkproces. Het gaat om complexe ICT-producten die feilloos moeten functioneren binnen de complexe omgeving van een zorgorganisatie. ChipSoft maakt gebruik van een zelf

Bekijk vacature »

Senior applicatieontwikkelaar

Ben jij een gedreven applicatieontwikkelaar met minimaal drie jaar werkervaring? En wil je een uitdagende baan met impact én jezelf breed ontwikkelen? Bij UPS bouw je mee aan complexe systemen die wereldwijd worden gebruikt en krijg je alle ruimte om nóg beter te worden in je vak. Dit ga je doen In een dynamisch scrumteam werk je aan de hand van processen en technologieën zoals CI/CD en DevOps aan het behalen van jullie doelen. Je bent betrokken bij alle facetten van applicatieontwikkeling: van ontwerpen en bouwen tot testen en implementeren. Je levert ontwerpen die passen bij de onderliggende frameworks en

Bekijk vacature »

Senior .NET Developer Datawarehouse

Bouw jij graag mee aan de nieuwe generatie van het datawarehouse-framework voor de zorg? En kent programmeren in C# geen geheimen voor jou? Dan pas jij perfect in ons team in Amsterdam. We bieden jou de kans om complexe uitdagingen op te lossen en te werken met de nieuwste technieken. Jouw baan Zorgprofessionals nemen belangrijke beslissingen op basis van data uit ons Datawarehouse. Als .NET Developer Datawarehouse ontwikkel jij een nieuwe generatie van het achterliggende framework. Je werkt dagelijks met zeer grote en complexe datasets en krijgt te maken met uitdagende issues, waarbij diepgaand onderzoek nodig is. Je faciliteert de

Bekijk vacature »

ASP.NET CORE developer Fullstack / Intern

Bedrijfsomschrijving Mijn klant houdt zich bezig met alleen maar maatwerk software. Door de flexibiliteit van de developers bedienen ze bijna elke markt; van start-ups tot aan de grotere internationaal georiënteerde bedrijven. Bepaalde applicaties zijn standaard geworden en worden als totaalpakket aan de klant aangeboden. Andere applicaties worden maandelijks onder de loep genomen. Kortom: genoeg uitdaging voor een .NET Developer. Je komt te werken in een gezellig team van ongeveer 20 mensen met een platte structuur. Er wordt veel voor het personeel geregeld en regelmatig ga je met het team op pad. Je collega's zijn IT minded mensen. Het gaat hier

Bekijk vacature »

.NET C# ontwikkelaar gezocht (C# Winforms, Xamarin

.NET C# ontwikkelaar bij een slagvaardig en hard groeiend bedrijf met korte lijnen? In een omgeving waar je onder andere direct samen met de oprichter werkt aan het verder ontwikkelen van een vernieuwend product? Dan is deze vacature zeker iets voor jou. Voor een bedrijf in Rotterdam zijn we momenteel op zoek naar een .NET C# ontwikkelaar. Het gaat om klein bedrijf dat op een punt is aanbeland waar de vraag naar hun software flink aan het toenemen is. Hierdoor zijn ze op zoek naar meerdere .NET ontwikkelaars die samen met de oprichter en nog verschillende andere collega’s hun software

Bekijk vacature »

.NET developer / C# / Azure / Zorg

Functieomschrijving Ben jij een .NET Developer met minimaal 2-3 jaar ervaring en ben je toe aan de volgende stap in je carrière? Wil jij werken op het hoogste niveau en aan de slag gaan bij de .NET ontwikkel organisatie van Brabant? Dan is deze functie perfect voor jou! Als .NET Ontwikkelaar ga je: Programmeren van high-availability en high-security applicaties in C#; Samen met je teamgenoten nieuwe applicaties/diensten ontwikkelen in .NET; Overleggen met de informatie analisten en testers; Ontwikkelen van webservices (WCF); 20% van je tijd besteden aan innovatie; Deelnemen aan projecten om nieuwe ketenpartijen toe te voegen; Bouwen van unit

Bekijk vacature »

ETL Developer Datawarehouse

Wil jij je ETL-ontwikkelexpertise inzetten binnen de zorg? Dan is dit jouw baan! Je werkt vanuit de Crystal Tower in Amsterdam met de nieuwste Microsoft-technieken aan slimme oplossingen die zorgorganisaties helder inzicht geven in hun verbeterpunten. Jouw baan Onze datamodellen geven ziekenhuizen meer inzicht in hun huidige activiteiten en verwachte ontwikkelingen. Jij gaat deze complexe modellen verder uitbouwen én ontwikkelt en verbetert daarbij proactief de ETL in C# en SQL. Hierbij heb je alle ruimte om te sparren met (ervaren) collega-ETL-ontwikkelaars en werk je samen met onze BI-ontwikkelaars, software developers en consultants technische implementatie. Jouw team Je versterkt een gemotiveerd

Bekijk vacature »

Fullstack .Net Developer voor int. marktleider met

Voor een internationale marktleider in metaalbewerking ben ik op zoek naar een junior / midlevel Fullstack .Net developer. Wat je gaat doen: Onze klant maakt gebruik van hun zelf gebouwde logistieke applicatie. Nu willen zij deze sterk uitbreiden. Zo willen ze o.a. een klant portaal maken, een online factuur systeem bouwen en een mobiele applicatie bouwen. Alles om beter zaken te doen met hun klanten. Je werkt hierbij in .Net C# en later ook Azure. Wie jij bent: MBO / HBO afgestudeerd 2 - 6 jaar ervaring met C# en .NET applicaties Design ervaring is een plus Spreekt Nederlands en

Bekijk vacature »

New business developer

Sprechen Sie flieBend Deutsch und haben Sie erfahrung im sales? Möchten Sie in Vollzeit im Gebiet von Reusel arbeiten? Dann könnte dies die richtige job für Sie sein! What will you be doing? You will start working as a new business developer for the German speaking market. The head office is located in Reusel. From there you will be working 35 hours a week to support the marketing strategy and ensure the growth of the company. You will be doing this by for instance calling potential customer, in order to make an appointment for the account managers. furthermore, you will

Bekijk vacature »

Front-End Developer JavaScript Vue.js Financial or

Bedrijfsomschrijving You will work with a big financial organization in Amsterdam. The department you will work in is responsible for everything related to the website of the bank and their payment applications. They have multiple Scrum teams based in Amsterdam, but also have team members working for their vendor partner at an off-shore location in India. Currently, the organization has started the migration to DevOps, where the Agile/Scrum teams are fully autonomous and develop, release and maintain their software & support their own applications in the production environment. Functieomschrijving Are you an enthusiastic Front-End Developer? Do you have experience working

Bekijk vacature »

Mendix Advanced Developer (NL)

Mendix Advanced Developer (NL) Den Haag HBO/WO IT Professional "Als Mendix Advanced Developer impact maken op de groeiende E-commerce markt met onze logistieke software en onze kritieke logistieke keten. Je doet dit door ontwikkeling en uitbreiding van onze Mendix Cloud omgeving, waarbij je complexe business processen vertaalt naar kritieke Mendix applicaties.". Wat ga je doen? PostNL is becoming a postal tech company Als Mendix Advanced Developer ben je onderdeel van een multidisciplinair Business-IT-team bestaande uit onder andere een Lead, Mendix Developers en Solution Consultants. Wij zetten Mendix in voor kritieke processen waarbij applicaties optimaal moeten performen om dagelijks rond de

Bekijk vacature »

.NET Developer Financieel

Werk jij als software developer het liefst met uitdagende systemen? Dan kun jij je bij onze vestiging in Amsterdam volledig uitleven als .NET Developer Financieel. Wanneer begin je? Jouw baan Je ontwerpt, ontwikkelt, ondersteunt en onderhoudt je eigen financiële module binnen HiX, onze ICT-totaaloplossing voor de zorg. Je schrijft objectgeoriënteerde code, speurt naar verbeteringen, werkt aan vernieuwende projecten, doet code reviews en voert testen uit. Een uiterst verantwoordelijke job, want dankzij jouw software kunnen zorginstellingen hun zorg factureren, voldoen aan afspraken met zorgverzekeraars, verplichte landelijke aanleveringen van financiële data doen en nog veel meer. Je brainstormt regelmatig met collega’s hoe

Bekijk vacature »

Software Consultant Financieel

Software Consultant Financieel Volg jij liever de veranderingen in de financiële wet- en regelgeving dan een spannende Netflix-serie? En zet je die laatste veranderingen met veel plezier om naar gebruiksvriendelijke software voor zorgorganisaties in de caresector? Jouw baan Actuele wetten en regels vertalen in concrete ICT-oplossingen? Dat doe jij. Cursussen geven aan zorgprofessionals? Check! Een verpleeghuis of GGZ-instelling adviseren en ondersteunen? Ook dat is jouw job. Je bent de onmisbare schakel tussen onze ontwikkelaars en de eindgebruikers van onze software. Al jouw activiteiten zijn volledig gericht op de financiële processen binnen care-organisaties. Jouw team Software Consultant Financieel ben je niet

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

27/10/2020 10:45:32
 
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.