Dia en generated code

From A-Eskwiki
Revision as of 20:25, 27 June 2018 by Timb (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

TODO: uitleg over dia aanpassen

Een methode in generated code stoppen

Hiervoor heb je de dia, en de file docs/generator/WSW4objects/WSW4method.php nodig. Pas in de dia de Entiteit- of DBObject-klasse aan (TODO: zoek uit wat het verschil is...) en voeg een virtuele methode toe, met naam en comment en parameters enzo naar keuze. Vervolgens ga je naar docs/generator/WSW4objects/WSW4method.php toe, stop je je methodenaam in de enorme switch-statement, en voeg je een corresponderende code$methodenaam-methode toe. Deze neemt $fp: de filehandle waar de generated code heen geschreven moet worden, en $cls: de klasse waar de methode daadwerkelijk op terechtkomt. Hierin is het een goed idee om $this->codeMethodHeader($fp); als eerste aan te roepen, die verzorgt een mooie methodeheader. Vervolgens print je de body van je methode, en vergeet niet de sluit-} :-) Run dia2php en sta verbaasd terwijl je volautomatisch allerlei code niet meer hoeft te schrijven!

Internals van dia2php en dia2py

De twee scripts om dia om te zetten in code werken op een vergelijkbare manier:

  • lees het dia-bestand in
  • doe wat verwerking om WebCie-specifieke constructies te maken
  • output een heleboel bestanden

De output van dia2php bestaat uit updates voor alle bestanden met Generated-klassen, en eventueel maakt het de bestanden met niet-Generated-klassen aan, als die nog niet bestaan. In de Generated-klassen worden velden en methoden autogegenereerd. Bovendien updatet het www/WhosWho4/database.sql, die in MySQL alle tabellen voor WhosWho4 aanmaakt.

De output van dia2py bestaat alleen uit Generated-klassen met velden, omdat het schrijven van methoden nog niet geïmplementeerd is.

In dia2php gebeurt het verwerken in-place, wat de code onoverzichtelijker maakt. Daarom leest dia2py alles in als Diagram$Bla-objecten, en worden op basis daarvan Python$Bla-objecten geconstrueerd. Dit zou zorgen voor betere scheiding der taken. Bovendien heeft dia2py een soort HTMLObjecten, maar dan voor Python. Deze zouden moeten zorgen dat je in je codegeneratie niet veel stringconcatenatie enzo hoeft te doen.

dia2php

WSW4Var

De klasse WSW4Var representeert velden van een klasse: iets wat je kan getten (en vaak, maar niet altijd, kan setten).

De namen van variabelen kunnen verschillen in PHP en in SQL. Zo is de PHP-naam DeelnemerAntwoord::deelnemer_activiteitID verbonden met de kolom `DeelnemerAntwoord`.`deelnemer_activiteit_activiteitID` in de database. Dit is niet de allergelukkigste combinatie, maar het zorgt ervoor dat foreign key-variabelen in ieder geval in de database voor de hand liggendere namen hebben. Vraag je je nu af: wat is een foreign key-variabele? Lees dan verder!

Als een variabele voldoet aan $var->isForeign(), dan verwijst het naar een ander WSW4Class. Zo heb je bijvoorbeeld bij Activiteit een veld categorie, die verwijst naar de klasse ActiviteitCategorie. Foreign variablen komen altijd in groepjes: een variabele die voldoet aan $var->isForeignObject() representeert het object als geheel (de ActiviteitCategorie zelf), en een of meer variabelen die voldoen aan $var->isForeignKey() die de foreign key-relatie mogelijk maken, en dus hetzelfde type zijn als de respectievelijke primary keys in de andere klasse. Voor Activiteit heb je dus een foreign object-variabele categorie, en een foreign key-variabele categorie_categorieID. De foreign object-variabele houdt bij welke foreign key-variabelen erbij horen in een array $var->subKeys.