Webapplicatie

Geschiedenis

In 2009 hebben we voor Gilde Amersfoort, waarvoor ik als vrijwilliger actief ben, gekeken naar een goed pakket om boekingen van wandelingen te registreren.
Die waren er wel maar daar moesten we bedragen voor neertellen die een onverantwoord beslag op onze financiën zouden leggen.

Ik heb toen in eerste instantie een elektronische vervanger van de papieren boekingsformulieren gemaakt.
Daar kwamen al snel wensen voor uitbreidingen op. En toen liep ik tegen de quick-and-enigzins-dirty benadering op.

Ik heb gekeken naar allerlei frameworks als Zend etc. maar die gaven toch te veel beperkingen.
Ik heb toen de applicatie geheel opnieuw gemaakt. Voor het overgrote deel in PHP met een beperkt aantal ondersteunende Perl-scripts.

Bij het opzetten van de nieuwe versie heb ik lering getrokken uit de lessen van de eerste versie

  • sterk OO-georiënteerd
  • gebaseerd op het MVC-model

In het totaal bestaat de applicatie nu uit meer dan 300 PHP-modules (inclusief config-files e.d.) met meer dan 23000 source-regels.

Controllers

 

Er zijn plm. 50 controllers. Deze bevatten de applicatie-logica.

Models

Er zijn 76 models. Per tabel/view is er basis-model die één enkele rij afbeelt plus een selector-model waarmee 1 of meerdere rijen gevonden kunnen worden.
Dat lijkt indrukwekkender dan het is. Nieuwe models worden nu via een Perl-script gegenereerd. Het script kijkt welke velden er in de tabel of view zitten en genereert de PHP-code.

Views

De views genereren de HTML. Dat is ook de enige plek waar HTML wordt aangetroffen.
Ik gebruik geen template-engine: PHP is een veel sterkere template-taal dan welke engine dan ook.

Controllers roepen models en views aan, views roepen evt. models aan.

Er zijn nog wat ondersteunende modules:
  • 24 library-modules met min-of-meer algemene functies
  • 18 helpers die applicatie-specifieke ondersteuning geven

De ervaringen in de drie jaar dat we deze versie gebruiken, zijn positief. Er zijn al heel wat uitbreidingen geweest en die leverden geen problemen op. Door de gekozen opzet is het uiterst onwaarschijnlijk dat door een aanpassing of toevoeging op een bepaalde plek ergens anders problemen ontstaan.

Werkwijze


De sources beheer ik op mijn lokale Linux-station met git. Dat is daar uitermate geschikt voor.
Met name de mogelijkheid voor branches en merges werkt uitstekend.

Als ik een wat grotere aanpassing ga doen maak ik eerst een branch. Daar werk ik op.
Als er ondertussen ook nog wat op de huidige applicatie moet gebeuren kan dat.

Als ik de aanpassing getest heb en goed bevonden merge ik de branch in de hoofdtak.

Ik kan gemakkelijk zien welke modules op de remote server niet kloppen met de modules op mijn lokale PC. Die zet ik dan over.