MVC-model PM-systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Full Stack Developer

Dit ga je doen Ontwikkelen van Product Informatie Management (PIM) systemen; Werken aan zowel grotere als kleine projecten voor toonaangevende klanten binnen o.a. de retail; Verantwoordelijk voor de front-end werkzaamheden; Naast de front-end werk je ook aan de backend. Hier ga je werken Als Full Stack Developer komt je te werken binnen een vooruitstrevende organisatie die Product Informatie Management (PIM) systemen levert aan hun klanten. Hun klanten zijn toonaangevende bedrijven binnen o.a. de retail. De organisatie zit gevestigd in regio Zwolle en bestaat uit zo'n 35 medewerkers, waarvan 30 IT. Je komt te werken binnen één van de zelfsturende development

Bekijk vacature »

Backend developer

Functie omschrijving Ben jij graag bezig met de back-end van applicaties? Zou je dit graag willen doen voor een kleine werkgever waar ook tijd is voor een drankje op zijn tijd? Je taken hierbij zullen bestaan uit: Gebruik maken van de volgende technieken: .NET (core), C#, SQL, XML, MVC, JSON, REST & SOAP API. Gebruik maken van de volgende tools: Visual Studio, GIT, Jira, Jenkins. Bovengenoemde technieken en tools ga je gebruiken om: Nieuwe functionaliteiten te ontwikkelen. Wijzigingsverzoeken van klanten uitvoeren. Verzorgen van koppelingen tussen data. Bedrijfsprofiel Jouw nieuwe werkgever bevindt zich in regio Raamdonksveer en bieden oplossingen op gebied

Bekijk vacature »

Als PHP developer (Symfony) bijdragen aan betere z

Functie Als Medior/Senior PHP developer wordt er een mate van zelfstandigheid verwacht, maar ook dat je goed in een team kunt opereren waar kennis wordt gedeeld en er bijvoorbeeld codereviews plaatsvinden. Kwaliteit staat voorop, mede hierom werken ze bijvoorbeeld zonder echte deadlines in hun sprints. De SaaS-applicatie wordt volledig ontwikkeld in PHP en Symfony. De module bestaat uit een stuk informatie verrijking en intelligentie wat resulteert in een medische check. De logica wordt daarom in de code geïntrigeerd. Je bent onder andere bezig met complexe databases waar meer dan 80.000 medicijnen op verschillende niveaus in staan, die maandelijks worden geactualiseerd.

Bekijk vacature »

Java Ontwikkelaar

Java/Kotlin Developer Ben jij een ervaren Java/Kotlin developer met een passie voor het automatiseren van bedrijfsprocessen? Wil je graag deelnemen aan uitdagende projecten bij aansprekende klanten? En ben je op zoek naar een professioneel, ambitieus en dynamisch bedrijf om je carrière verder te ontwikkelen? Kom dan ons team bij Ritense in Amsterdam versterken! Zo ziet de functie eruit: Als Java/Kotlin developer bij Ritense ben je verantwoordelijk voor de ontwikkeling en implementatie van applicaties die bedrijfsprocessen automatiseren, zodat onze klanten slimmer, efficiënter en klantgerichter kunnen werken. Als developer ben je in de lead en zorg je voor de correcte oplevering van

Bekijk vacature »

PHP Developer

Functieomschrijving Wij zijn op zoek naar een PHP Developer met Laravel ervaring! Voor een groeiende werkgever in regio Breda zijn wij op zoek naar een medior PHP developer met Laravel ervaring. Je gaat aan de slag met het ontwikkelen van maatwerk software voor klanten in een specifieke markt. Als PHP developer ben je samen met een gemotiveerd team van 6 collega’s verantwoordelijk voor de ontwikkeling, beheer en het innoveren van informatiesystemen voor klanten in een specifieke branche. Als software developer ondersteun je complexe uitdagingen van klanten. Je brengt hun wensen in kaart en vertaalt deze door naar maatwerk software. Om

Bekijk vacature »

High level C++ QT Developer

Vacature details Vakgebied: Software/IT Opleiding: Senior Werklocatie: Eindhoven Vacature ID: 13486 Introductie Would you like to be involved in every aspect of software development for our exceptional products, from specification and design to testing and integration? If you're passionate about software development and eager to apply your programming skills to create customer-focused deliverables, then this is the perfect chance for you to expand your expertise. You can become a member of our Machine Control department's data-driven development team, where you'll design and build software solutions that optimize machine productivity. As a senior software design engineer, you'll participate in all phases

Bekijk vacature »

PHP/Symfony developer

Functieomschrijving Vanuit het hoofdkantoor in omgeving Bergen op Zoom ben je als PHP/Symfony Developer niet alleen bezig met software ontwikkeling. Je bent buiten ontwikkeling ook continu bezig met het zoeken naar nieuwe trends en ontwikkelingen die van waarde kunnen zijn voor de efficiëntie van software ontwikkeling. Techstack: PHP, Symfony & mySQL. Jouw takenpakket ziet er als volgt uit: Het ontwerpen en implementeren van webapplicaties met het Symfony-framework; Het testen van ontwikkelde applicaties om te zorgen dat ze goed functioneren en voldoen aan de eisen van de klanten; Het schrijven van een schone en efficiënte code volgens het Symfony framework; Onderhouden

Bekijk vacature »

Back end developer Digital Agency

Functie Wij zijn van origine een wordpress bureau, maar sinds 2006 zijn wij dit wel redelijk ontgroeid. Naar mate de jaren verstreken zijn we gegroeid in omvang, maar ook in de complexiteit van opdrachten waarin wij onze klanten kunnen bedienen. Momenteel bestaat onze organisatie uit 4 front end developers, 12 back end developer 3 projectmanagers en een 2 koppig management. Wij zijn een hele informele, bijna familiaire organisatie. Geen strak pak of overhemd, nee gewoon dragen waar jij je prettig bij voelt. De gemiddelde leeftijd ligt tussen de 25 en 30 en wij doen er veel aan om onze hechte

Bekijk vacature »

Medior Mobile Developer iOS Amsterdam

Functie What will you be doing as Mobile Developer? As an iOS app developer you will work in a multidisciplinary team of app developers, web developers and designers. You will work on world-class apps that will be used by thousands of people. There is a lot of room for self-development on a technical and personal level. Together with the rest of the team you develop in the newest techniques and you go for the best quality. We work with Kotlin Multiplatform Mobile to develop hybrid apps and we guarantee quality with peer reviews, unit testing and we use a CI/CD.

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Ben jij een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Voor een mooi softwarebedrijf in omgeving Gouda zijn wij op zoek naar een Embedded Software developer. Binnen deze rol houdt jij je bezig met alle werkzaamheden die nodig zijn om een functionaliteit te bouwen. Denk aan ontwerpen, architectuur, programmeren en algoritmes. Je voert test en validatie werkzaamheden uit bij de implementatie bij de klant. Ben jij enthousiast en een echte team player? Lees dan snel verder en laat wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot aantal creatieve en ambitieuze ontwikkelaars. Ze

Bekijk vacature »

Back-end ontwikkelaar

Functie omschrijving Wil jij meebouwen aan diverse databasesystemen in een klein bedrijf met een platte organisatie? In een team van ruim 10 ontwikkelaars wordt er aan diverse ICT oplossingen gewerkt. Jouw taken hierbij zullen bestaan uit: Het onderhouden en door-ontwikkelen van bestaande databases. Denk hierbij aan schema verbeteringen en performance-tuning. Bij nieuwe ontwikkelingen ga jij ook bezig met het bouwen van het databaseschema. Omdat je in een klein team werkt zal je ook de C# routine verder uitbouwen en ontwikkelen. Ook kan je meedraaien in algemene refactory-, ontwikkel- of testwerkzaamheden. Je zal voornamelijk gebruik maken van de volgende technieken: .NET

Bekijk vacature »

C# Ontwikkelaar

Functie omschrijving We are looking for a dutch native speaker Wil jij graag aan de slag als C# ontwikkelaar en jouw skills verder ontwikkelen? Zoek niet verder! Als C# ontwikkelaar ga je aan de slag met de volgende taken: (verdere) ontwikkeling van de software voor de interne processen binnen een .net omgeving; optimaliseren van de dataprocessing; ontwerpen en implementeren van zowel desktop- als web-programmatuur; ontwikkeling van tools ten behoeve van consultants en klanten. Bedrijfsprofiel Deze organisatie is gevestigd in de regio van Den Bosch. Zij ontwikkelen business intelligence software voor een specifieke branche. Dit houdt in dat zij dashboards ontwikkelen

Bekijk vacature »

Robot Programmeur

In het kort Drie redenen waarom deze vacature uniek is! Programmeren van zelflerende robots Werken op kantoor en testen in de bedrijfshal Je krijgt verantwoordelijkheid, vrijheid en je mag werken naar eigen inzicht De organisatie Hier ga je aan de slag Een bedrijf dat innovatieve robottoepassingen ontwerpt en bouwt voor onder andere de staal industrie, energie- bouw- en agrarische sector. De robots die vaak in combinatie met diverse randapparatuur geleverd worden vormen een totaaloplossing voor de klant. Dit zijn klanten over de hele wereld, van België en Duitsland tot China, India, maar ook in Nederland. Projecten waar momenteel aan wordt

Bekijk vacature »

Junior Developer Low-code

Dit ga je doen Low-code ontwikkeling van software voor landelijk bekende organisaties; Samenwerken in een team van 10 collega's; Opleveren van mooie eindproducten, middels de Agile methodiek; Direct contact met de eindklant over de gewenste oplossingen. Hier ga je werken Als startende IT-professional kom je te werken in de regio van Lelystad bij een organisatie die met toonaangevende klanten uit heel Nederland samen werkt. De producten en diensten van de organisatie bereiken miljoenen Nederlanders. Hierbij komt een grote hoeveelheid informatie kijken en deze moet discreet en veilig verwerkt worden. De processen die hierbij horen worden door het IT team vormgegeven.

Bekijk vacature »

C# developer

Functie Als ervaren Software Engineer wordt jij verantwoordelijk voor het bedenken en ontwikkelen van technische (maatwerk) oplossingen voor onze klanten en dit samen met de klant af te stemmen. Jij wordt o.a. verantwoordelijk voor de doorontwikkeling het software pakket welke voor ons enorm belangrijk is. Dit pakket zorgt er namelijk voor dat wij complete productielijnen kunnen aansturen en monitoren. Daarnaast heb jij actief contact met onze hoofdvestiging om het software achter een van onze systemen te verbeteren en te herschrijven. Momenteel zijn onze C# applicaties geschreven met o.a. Winforms. Echter hebben wij de actieve ambitie om dit te gaan herschrijven

Bekijk vacature »
Citroen Anoniem Graag

Citroen Anoniem Graag

08/06/2008 21:31:00
Quote Anchor link
Goede avond php-ers,

Deze avond zit ik mij wederom te verdiepen in OOP en ik kwam tot de ontdekking dat het 3-lagen systeem heel mooi werk. Maar ik weet niet zeker of ik het goed begrijp want ik heb er nu zoveel over gelezen dat ik de kluts een beetje kwijt ben.
Ik heb nu een situatie geschetst en mij vraag is wordt het MVC-model hier goed toegepast.
Het gaat om een PM systeem

ModelPM
+ getPMById(iId)
+ getAllPM()
+ SendPM($iFromUser, $iToUser, $sSubject, $sPm)
+ DeletePM($iId)
+ SetRead($iId)
+ SetUnread($iId)

ViewPM
+ Mijn basic Template parser of smarty oid

ControllerPM
De controllor 'bedenkt' welke actie er ondernomen moet worden (leidt hij bevoorbeeld af aan de get-waarden) en roept vervolgens deze actie's aan bij het model. Vervolgens propt hij de verkregen data zo in de view (template) en tádá, je werkt.

Op die manier kan je door simpelweg een andere view te nemen een xml bestand maken, een html bestand maken, etc.
Klopt dit?

Groetjes Freek
 
PHP hulp

PHP hulp

24/12/2024 14:31:30
 
Joren de Wit

Joren de Wit

08/06/2008 21:39:00
Quote Anchor link
De situatie die je schetst klopt ongeveer wel, alleen zit het nog niet helemaal lekker in je model(s).

Zie je models als objecten. Een ModelPM stelt dan een PM voor en bevat dus alleen methods (acties) die op 1 PM toegespast kunnen worden. De method getAllPM() hoort dan dus ook niet thuis in dit model.

Bekijk dus nog eens goed welke models je nu hebt en welke je nog nodig hebt.
 
Citroen Anoniem Graag

Citroen Anoniem Graag

08/06/2008 21:56:00
Quote Anchor link
Idd, in de gauwigheid even over het hoofd gezien. Dan zal het zoiets moeten worden.

ModelPMLijst (weet ff geen andere naam ModelPMInbox miss?)
+ GetPMs($iUser)
+ etc

ModelPm
+ getPM(iId)
+ SendPM($iFromUser, $iToUser, $sSubject, $sPm)
+ DeletePM($iId)
+ SetRead($iId)
+ SetUnread($iId)

ViewBasic
+ Mijn basic Template parser of smarty oid

Maar dan kom ik niet helemaal uit de models, hoe zouden die eruit zien en welke methods zouden ze (minimaal) hebben?
 
Jelmer -

Jelmer -

08/06/2008 22:09:00
Quote Anchor link
Ik zou ModelPM (gewoon "PM" of "PersonalMessage" is toch eigenlijk een logischere naam?) slechts methods geven die de eigenschappen van een PM kunnen aanpassen. Je zou de methods zelfs achterwege kunnen laten en hem alleen properties geven. De eigenschappen van een PM.

Dan zou ik er een klasse naast maken, bijvoorbeeld PMMapper, beetje a la jouw ModelPMLijst, die vervolgens de PM's uit de database kan halen (en er instanties van PM van maakt, en die in een array teruggeeft) en PM-instanties in de database kan zetten. Je model bevat dan geen SQL, alleen maar controle over wie en hoe je PM object aangepast mag worden. Je Mapper bevat de SQL code en is verantwoordelijk voor het opslaan. Deze mapper is specifiek voor het model, maar niet voor de instantie. Je hebt dus maar 1 instantie van PMMapper nodig, waar je meerder instanties van verschillende PM's hebt.

Idee erachter is dat je op deze manier relatief gemakkelijk de manier van opslaan van een PM kan veranderen. Nu wordt hij bijvoorbeeld opgeslagen in een database, maar het kost niet veel moeite om hem zo aan te passen dat hij een IMAP server gebruikt om de PM's als echte emailtjes op te slaan en te versturen, of een HTTP webservice o.i.d. Dat zou slechts een kwestie zijn van een andere mapper-klasse gebruiken, je hoeft dan je model & de rest van je code amper aan te passen.

Voor je views kan je een template parser gebruiken, hoeft op zich niet. Je moet er gewoon voor zorgen dat er geen wijzigingen & data ophalen in de view gebeuren. Binnen de view alleen logica die verantwoordelijk is voor de presentatie van de data. Het maakt verder niet uit of het een template-parser is, of een aparte klasse die er een RSS feed van maakt via DOM. Ikzelf heb gewoon een kleine klasse die middels include & extract een PHP bestand inlaadt waarin je dan gewoon heel simpel echo $var kan doen. Wel zo simpel, zolang je jezelf in bedwang kan houden en niet de verkeerde logica op de verkeerde plek zet. Logica in je view kan je niet voorkomen (of je gaat heel omslachtig te werk) want je zal altijd lussen en if/else-statements nodig hebben.
 
Joren de Wit

Joren de Wit

08/06/2008 22:33:00
Quote Anchor link
Jelmer, hoe zou jij het creëren/versturen van een PM in dit geval aanpakken?

Even uitgaande van een database is het versturen van een PM niets meer dan een nieuw record in een bepaalde tabel opslaan. Je zou er dus voor kunnen kiezen om de PM 'zichzelf' te laten versturen via een method zonder parameters in de PM klasse. Of zou je deze methode ook in de PMMapper klasse onderbrengen waarbij je de betreffende instantie van PM als parameter meegeeft?
 
Jelmer -

Jelmer -

08/06/2008 22:48:00
Quote Anchor link
Ik zou het in de Mapper klasse onderbrengen, omdat de PM slechts zichzelf representeert, en zelf geen kennis heeft van wat er allemaal met hem gedaan kan worden.

Ik had vroeger altijd een link naar een instantie van de Mapper in de Model zitten, zodat je [Model]->save() kon doen. Maar ik gebruik nu gewoon [Mapper]->save([Model]) en dat is eigenlijk veel gemakkelijker dan [Model]->save() omdat je exact weet met welke mapper je te maken hebt, en er geen magic nodig is om de mapper in de model te krijgen.


Wat twijfelachtig zijn relaties. Stel dat een PM een ontvanger-property heeft, een User dus. Dan zou je een method kunnen maken die de bijbehorende instantie van het User-model teruggeeft (wel zo logisch) maar hoe moet het dan met mapper voor het user-model? Moet het PM-model een instantie hebben of opvragen van de User-mapper, of gebruik je een Registery-klasse die daarvoor zorgt? Of laat je de PM-mapper vanzelf de joins regelen zodat hij ook meteen de user ophaalt (waardoor je dus het User-model & het PM-model gaat mixen) Ik ben er nog niet helemaal uit, maar gebruik meestal de manier dat het PM-model via een registery of iets vergelijkbaars aan de User-mapper kan komen, en daar de User-instantie vandaan kan toveren. Het voordeel is dat alle User-model gerelateerde acties door de mapper gaan, en bij wijzigingen ik alleen deze hoef aan te passen, en het gemakkelijk is om hier dingen te optimaliseren en caches toe te voegen. Nadeel is dat het lastiger is om gebruik te maken van JOINS en de voordelen van een lekker ingewikkelde SQL query. Daar moet je dus een beetje afwegen.
 
Jelmer -

Jelmer -

08/06/2008 22:48:00
Quote Anchor link
... 2 ...
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Jelmer -

Jelmer -

08/06/2008 22:48:00
Quote Anchor link
en 3
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Citroen Anoniem Graag

Citroen Anoniem Graag

27/06/2008 15:45:00
Quote Anchor link
19 dagen later,

Het idee is blijven liggen maar ik heb nu weer even tijd.

Hoe ik het nu in gedachten heb:
PMMapper
- aObjectenPm

+ __construct(PDO $oDb, $oGebruiker)
+ lijst($sMap = 'inbox') //outbox, prullebak
+ delete ($iId)
+ bekijken ($iId)
+ nieuw ($iNaar, $sOnderwerp, $sBericht)
// eventueel nog wat functies om bijv Gelezen weer op ongelezen te zetten

PM
- id
- van_id
- naar_id
- bericht
- onderwerp
- tijd
- status //ongelezen, gelezen, prullebak

+ __get($sVariabel, $mValue)
+ __set($sVariabel)

Zou dit een mooie opzet zijn? Tips? Iets veranderen?
Gewijzigd op 01/01/1970 01:00:00 door Citroen Anoniem Graag
 
Jelmer -

Jelmer -

27/06/2008 23:46:00
Quote Anchor link
Persoonlijk zou ik ze iets meer verweven, en iets algemenere maken:

PMMapper:
- (intern misschien iets van een soort cache-array)
- PDO $resource

+ __construct(PDO $resource)
+ getMessages($folder = 'inbox')
+ getMessageById($id)
+ getMessageOfUser(User $user)
+ put(PM $message)

en PM:
- id
- sender_id
- receiver_id
- subject
- message
- timestamp
- status

+ __construct(User $sender, User $reciever)
+ timestamp() -> geeft DateTime terug bijv.
+ receiver() -> geeft User object terug
+ sender() -> idem.
+ message()
+ setMessage($message)
+ markRead()
+ markDeleted()


Opslaan (en invoegen) gaat dan via $mapper->put(new PM(...)); (uiteraard stel je PM eerst in). Ik gebruik graag getters & setters omdat je dan objecten zoals DateTime achteraf kan aanmaken op basis van dat wat je vers uit de database hebt getrokken, en maak je dus alleen de objecten aan wanneer je ze ook werkelijk gebruikt. Daarnaast heb ik ze het liefst gewoon simpel in aparte methods, zodat je bij het maken van callbacks en andere situaties waar je de functienaam moet opgeven geen ingewikkelde constructies hoeft te maken.

Trouwens, is het handig om deleted als status in plaats van als map te definiëren? Het is nu onmogelijk om ongelezen berichten te hebben in je prullenmand :)
 
Jelmer -

Jelmer -

27/06/2008 23:46:00
Quote Anchor link
... en 2 ...
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 
Jelmer -

Jelmer -

27/06/2008 23:46:00
Quote Anchor link
en 3
Gewijzigd op 01/01/1970 01:00:00 door Jelmer -
 



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.