Posts Tagged ‘Requirements’

Structuur

Wednesday, June 17th, 2009

Het eerste probleem waar ik tegenop loop met mijn framework is de structuur.

Regels

  • De superglobals (GET, POST, SERVER, SESSION), mogen niet direct vanuit de model/controller of view aangesproken worden;
  • De controller mag nooit een “view element” zoals bijvoorbeeld een formulier of een paginator aanmaken;
  • De controller moet maar 1 keer gemaakt hoeven worden, dat betekend dat 1 controller verschillende types views aan kan (hiermee is het mogelijk om een controller zowel JSON, XML als XHTML uitspuigt zonder dat je daarvoor iets in je controller moet veranderen).

Wat wil ik ondersteunen

  • Model die voor alle applicaties beschikbaar is;
  • Model voor de applicatie zelf;
  • Controllers;
  • Views;
  • Renders.

Wat vindt jij? Mis ik iets?

De mappen

Met de bovenstaande informatie, ben ik tot de conclusie gekomen dat er 3 grote elementen zijn, namelijk “public”, “application” en “general libraries”.

Public
Het gedeelte wat voor de gebruiker zichtbaar is, ook wel public-www, httpdocs, htdocs en www genoemd.

Application
Dingen die voor de applicatie specifiek zijn. Denk aan controllers, views, maar ook aan specifieke models.

General Libraries
De general libraries bestaan onder andere uit de core van het framework. Dit zijn de classes die voor elke web-applicatie bruikbaar kunnen zijn.

[root]
 |- application
 |   |- controller
 |   |   \- {CONTROLLER CLASSES}
 |   |
 |   |- view
 |   |   \- {VIEW CLASSES}
 |   |
 |   |- template
 |   |   |- html
 |   |   \- {OUTPUT FORMATS}
 |   |
 |   |- library
 |   |   \- {APPLICATION MODELS}
 |   |
 |   \- Boot.php
 |
 |- library
 |   \- {MODELS}
 |
 \- httpdocs
     \- index.php

View Classes?

Ja ik kies er in mijn framework voor om voor elke Action een aparte View classe te maken. In deze classe kunnen functies gemaakt worden die bijvoorbeeld voor de template nodig zijn.

Boot.php?

Dit is waar ik het meest mee in mijn maag zit. Ergens moet de applicatie opstarten, maar wat is de verantwoordelijkheid van deze boot? Sowieso wil ik dat hier het grootste deel van de superglobals afgehandeld wordt, zodat ik die in ieder geval niet direct vanuit de rest van mijn framework aan hoef te roepen.

Frontcontroller?

Waar en hoe implementeer ik de frontcontroller? Routers liggen mij niet zo, aangezien het onnodig complex wordt, soms heb je namelijk 20+ routers nodig voor iets wat je normaal kan programmeren in 3 regels. Misschien een extra file FrontController.php, waarin de frontcontroller class staat, die op basis van een Request Object bepaald welke controller/action er aangesproken moet worden? Spreekt Boot.php de frontcontroller aan?

Antwoorden

Voordat ik mijn oplossingen met jullie deel, hoor ik graag eerst wat jou mening is. Wat vindt jij van mijn oplossingen?