MVC-model PM-systeem

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

.Net Front-end Ontwikkelaar

Wij zoeken een .Net Front-end Ontwikkelaar! Omschrijving Kun jij snel schakelen en ben je stressbestendig? Dan zoeken wij jou! Als .Net Front-end Ontwikkelaar help je mee aan de webapplicatie die over de hele wereld door allerlei bedrijven wordt gebruikt. Je werkt daarnaast mee aan nieuwe en verbeterde functionaliteiten en helpt met het oplossen van bugs. Over de opdrachtgever Je komt te werken in een ambitieus team dat zich blijft ontwikkelen. Dit is alle informatie die we nu kunnen delen over de werkplek. Als jij de .Net Front-end Ontwikkelaar bent voor deze job, vertellen we je snel nóg meer. Eisen Heb

Bekijk vacature »

Database ontwikkelaar

Functieomschrijving Wil jij aan gave logistieke softwareprojecten werken en bij een uniek softwarebedrijf in de regio van Tilburg? Wacht niet langer en reageer snel op deze vacature. Als Database ontwikkelaar ga je aan de slag het schrijven van stored procedures en verder uitbouwen van de SQL database. Je werkt in een database team, met allemaal mensen die energie krijgen van software en techniek. Verder krijg je als taak: Optimaliseren en uitbouwen van de MS SQL databases die gebruikt worden; Optimaliseren van query's, waardoor er efficiënter gewerkt kan worden; Je werkt met de technieken T-SQL of PL/SQL; Bij interesse kan je

Bekijk vacature »

Low Code Developer

Functie omschrijving Ben jij toe aan een nieuwe uitdaging en ben jij HBO afgestudeerd in de richting van IT? Heb jij verstand van datamodellering, NO CODE Platformen en kun jij het aan om projecten te leiden? Voor een leuke opdrachtgever in omgeving Rotterdam zijn wij op zoek naar een No Code developer die zich bezig gaat houden met het optimaliseren van bedrijfsprocessen bij klanten in heel het land! Wat ga je hier zoal doen? Je gaat geen code kloppen maar bedenken hoe applicaties eruit moet komen te zien. Je gaat werken met een non code platform, je kunt denken aan

Bekijk vacature »

Junior .NET developer

Functie Als junior .NET ontwikkelaar start jij in een ontwikkelteam met 7 .NET developers. In ons team werken er drie senior .NET developer, twee medior .NET developers en twee junior .NET developers. Er is dan ook genoeg senioriteit in ons team om jou te kunnen bieden wat jij nodig hebt! Wij werken in scrum en hebben drie wekelijkste sprints. Daarnaast doen wij minimaal vier keer per jaar een release. Ons platform is ontzettend complex en groot. Het is dan ook in het begin belangrijk dat jij de processen gaat begrijpen. Jij krijgt dan ook een cursus om beter te begrijpen

Bekijk vacature »

PHP Developer - medior functie

Functieomschrijving Ben jij innovatief en wil jij je kennis graag delen met jouw nieuwe collega's? Lees dan snel verder! Voor een leuke opdrachtgever in de omgeving van Roosendaal zoeken wij een Symfony developer. Of je nou junior, medior of senior bent, je krijgt hier alle vrijheid en verantwoordelijkheid om jouw eigen loopbaan te ontwikkelen. Je gaat je hier bezig houden met en inspelen op de actualiteiten van jouw vakgebied. Techstack: Symfony, PHP, mySQL. Kennis van Svelte is helemaal mooi meegenomen. Bedrijfsprofiel Al sinds '99 is dit webbureau actief. De kernwaarden binnen het bedrijf zijn integer, dienstbaar en deskundig. Je komt

Bekijk vacature »

Medior/senior Front-end developer

Functie Je maakt deel uit van een DevOps Scrum team en werkt samen met back-end developers, test-engineers, interaction designers en een projectmanager. Er zijn verschillende groepen Scrum teams. Een roadmap team is jouw ‘’thuisbasis’’, daar wordt gewerkt aan doorontwikkeling van bestaande omgevingen voor een aantal klanten. Hiernaast zijn er projectteams waar nieuwe omgevingen worden gebouwd, of grote complexe wijzigingen worden doorgevoerd op bestaande omgevingen. Je kunt (afhankelijk van jouw wensen en doelen) dus afwisselend werken in beide teams. Hiernaast participeer je in het Chapter Front-end development waar gezamenlijk kennis en ervaring wordt gedeeld. Als Front-end developer is het jouw doel

Bekijk vacature »

Hands-on Solution Architect / Software Architect (

TenneT is hard groeiend om de onze ambities waar te kunnen maken. Zo nemen wij een leidende rol in het aanjagen van de energietransitie. Het werven van nieuw talent speelt daarin een cruciale rol. Wij zijn op zoek naar een gedreven Solution Architect / Software Architect op onze locatie Arnhem die hieraan wil bijdragen en misschien ben jij dat wel? Jouw bijdrage aan TenneT Je werkt samen met gedreven DevOps teams, bestaande uit frontend, backend en middleware developers, testers, UX-designers. Samen met de teams ben je continu op zoek naar de beste oplossingen voor onze klanten. Als Solution Architect onderzoek

Bekijk vacature »

Als Front-end developer samenwerken met de beste c

Functie Momenteel zijn we voor één van de projecten bij hun key partner, een voorloper in de energiesector, op zoek naar gedreven Front-end developers. Ze nemen de lead in dit project en werken uitsluitend met vooruitstrevende technologieën. Ze verwachten dat de technologie die hier wordt ontwikkeld uiteindelijk door veel meer grote corporates, in verschillende sectoren zal worden toegepast. Dit is dan ook een heel uitdagend project om aan mee te gaan werken. Het team bestaat o.a. uit User Experience designers, Data Scientists en Software Engineers. De consultants en ontwikkelaars werken volgens de Design Thinking methode waarbij de eerste stappen van

Bekijk vacature »

Integratie Developer / Architect

Dit ga je doen Als Integratie Developer / Architect binnen deze organisatie krijg je echt de kans om impact te maken. De organisatie is groeiende maar houdt een corporate cultuur buiten de deur. Heb je een goede business case: zorg voor goede argumentatie en ga ervoor! Geen stroperig beslissingsproces dat jouw ideeën in de weg staat! Enkele van jouw taken: Je ontwerpt en ontwikkelt nieuwe integraties met behulp van interne tools (Boomi) of externe partners; Je vertaalt functionele specificaties naar technische oplossingen; Je denkt mee over strategische ontwikkelingen op het gebied van applicatie integratie; Je voert regie op leveranciers en

Bekijk vacature »

Lead C++ Developer

De rol van Lead C++ Developer Als Lead C++ developer bij KUBUS word je verantwoordelijk voor het implementatie design van requirements en de software architectuur van de desktop applicaties van BIMcollab, ons platform voor 3D model-validatie en issue-management bedoeld om de kwaliteit van 3D design-modellen voor gebouwen te verbeteren. Betere 3D modellen leiden tot betere gebouwen, dus zo draag je bij aan verduurzaming van de gebouwde omgeving met slimmer gebruik van materialen, minder verspilling en energie-efficiënte gebouwen. Een goede gebruikerservaring staat bij ons hoog in het vaandel; we gaan in onze ontwikkeling voor innovatie en kwaliteit. In je rol als

Bekijk vacature »

.NET Developer

Functie omschrijving Jij gaat in de functie van Software Developer werken met C# en .NET framework. Jij gaat maatwerk software ontwikkelen en softwareoplossingen creëren. Daarnaast optimaliseer je de bestaande software. Oplossingen waar de klant echt iets aan heeft, jij krijgt er energie van op dit te realiseren. Je gaat werken in een Microsoft omgeving(ASP.NET) en gebruikt daarnaast C# en MVC. Samen met het huidige IT team binnen deze organisatie verwerk je de wensen van de klant tot een (eind)product. Bedrijfsprofiel Je komt te werken in een klein team van developers, die zich voornamelijk bezighouden met back-end development. Verder staat dit

Bekijk vacature »

Senior .NET developer

Klaar voor een nieuwe uitdaging? Welke technologieën gaan schuil achter de dagelijkse energievoorziening? Als senior .NET developer bij Kenter maak jij samen met je team het verschil, zowel voor de interne organisatie als voor eindklanten. Samen bouwen jullie aan innovatieve dienstverlening met behulp van de nieuwste technologieën en tools. Het is een functie met veel vrijheid, goede arbeidsvoorwaarden én je draagt jouw steentje bij aan de energietransitie. Klinkt dit als iets voor jou? Lees dan verder of solliciteer direct! Wat ga je doen als senior .NET developer? Als senior .NET developer bij Kenter (onderdeel van Alliander) ben je van onschatbare

Bekijk vacature »

Embedded Software Developer

Functie omschrijving Voor een mooi softwarebedrijf in omgeving Moordrecht zijn wij op zoek naar een Embedded Software developer. Ben jij enthousiast en een echte team player? Lees dan snel of dit iets voor jou is! 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 een Embedded Software Developer die affiniteit heeft met de allernieuwste technieken? Laat dan snel wat van je horen! Bedrijfsprofiel Onze opdrachtgever bestaat uit een groot

Bekijk vacature »

Software Developer C# .NET

Functie omschrijving Software Developer C# .NET gezocht voor een dynamische organisatie! Ben jij net afgestudeerd of toe aan een volgende stap in je maatschappelijke carrière? Lees dan snel verder! Wij zijn op zoek naar een Software Developer die klaar is voor een nieuwe uitdaging en die een organisatie in de regio Houten wil versterken. Je werkt in deze functie aan verschillende projecten en gaat vaak op bezoek bij klanten. In deze functie kun je een grote mate van uitdaging, diversiteit en verantwoordelijkheid verwachten. Bedrijfsprofiel Waar kom je te werken? Je komt te werken bij een organisatie dat gespecialiseerd is in

Bekijk vacature »

Java (Java EE) Developer

In het kort Werken als Java developer betekent werken aan complexe IT projecten bij onder meer een internationaal containeroverslag bedrijf. Zo sturen we apparaten en eindgebruikers aan d.m.v. onze custom-made software oplossing, die dagelijkse vele duizenden containers verwerkt. Denk aan systemen die volautomatische kranen aansturen en op afstand bedienen, de volledige afhandeling van containernummerherkenning bij het laden en lossen van zeeschepen of het tonen van instructies aan de chauffeurs van ruim 300 straddle carriers. En dat allemaal redundant, robuust en in een dynamische 24/7 omgeving! Jij versterkt ons ontwikkelteam en gaat aan de slag met oa. Java i.c.m. Spring (Boot),

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

12/07/2025 08:38:52
 
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.