Interface Design eines CGI Library
-
Hallo Leute!
Ich schliesse mich kingruedi gleich an und frage euch ob meine Library so passt.
Ich designe sie naemlich gerade umFolgende Klasse gibt es:
CPPGI
- Singleton
- parst alle Variablen (GET, POST, COOKIE) im Ctor
- die direkte Verwaltung der Variablen uebernimmt managaVar
manageVar
- abstrakte Basisklasse
- abgeleitete Klassen sollen variablen handhaben (zB als map, vector,...)
- wird den Ctor von CPPGI uebergeben
Environment
- singleton
- hat eine menge get-Methoden fuer alle CGI Environment Variablen
HTTPHeader
- Basisklasse fuer die HTTP Header informationen
- Im Ctor kann der User alle Header informationen selber angeben
HTTPContentHeader
- public von HTTPHeader abgeleitet
- ist fuer Content typen da, zB HTML,...
- der User kann nur den type angeben, andere Angaben sind unzulaessig
HTTPHTMLHeader
- public von HTTPContentHeader abgeleitet
- im Ctor kann nichts angegeben werden
- beinhaltet alles fuer den Content Type HTML
HTTPRedirectHeader
- public von HTTPHeader abgeleitet
- im Ctor kann der User die URL angeben zu der redirected werden soll.
Cookie
- beinhaltet alle informationen die ein cookie braucht
- kann an HTTPHeader per SetCookie() uebergeben werden
htmlTag
- basisklasse fuer alle HTML Tags
htmlAtomTag
- klasse fuer alle atom-Tags zB <img>, <br>,...
- liest HTML::isXHTML() aus um zu wissen, ob sich der Tag selber zu schliessen hat-> <img> in XHTML sieht so aus <img />
htmlBoolTag
- Klasse fuer alle boolean-Tags zB <b>, <p>,...
htmlAttribute
- Klasse fuer alle HTML Attribute, zB class="foo", border="0",...
- wird per set() an htmlTag-Objekte uebergeben
HTML
- singleton
- stellt wichtige informationen ueber die aktuelle HTML Version bereit
- im Ctor wird die HTML Version vom User angegeben
- sollte HTML nicht instanziiert werden, dann schliessen sich htmlAtomTag Objekte nicht
und jetzt noch ein kleiner Beispielcode:
int main() { CPPGI& cgi=CPPGI::Instanciate(); cout<<HTTPHTMLHeader(); //gibt den header aus: Content-Type: text/html cout<<HTML::Header(html_401); //gibt den doctype fuer HTML 4.01 aus cout<<html().set(HTMLAttribute("lang","de")); //html() returned htmlBoolTag("html") //HTMLAttribute("lang","de") erzeugt das Attribute lang="de" cout<<"hello world"; cout<<html().close(); }
das Design ist leicht an das design von cgicc angelehnt.
Was haltet ihr davon?
mich stoert es etwas, dass ich 3 singletons habe...und noch eine Frage:
sollte Environment die ganzen Umgebungsvariablen schon im Ctor auslesen (sind ca. 20) oder lieber erst wenn der User eine Variable anfordert?danke das ihr euch soviel Text antut
-
Dass ich die HTML Hilfsklassen für überflüssig halte, ist dir glaub ich schon bekannt...
Dann frag ich mich: Lohnt sich die Environment Klasse?
Und dann würde mich der Code zum Cookie Zeugs interessieren...
-
Original erstellt von Mr. N:
Dann frag ich mich: Lohnt sich die Environment Klasse?
Und dann würde mich der Code zum Cookie Zeugs interessieren...Environment insofern, als dass du zB adminMail noch haendisch hinzufuegen koenntest, oder aehnliches.
dann machst du so:
env.addVar("adminMail","admin@mail.de")
und kannst ueberall im script darauf zugreifen:
env.getVar("adminMail");insofern denke ich, dass die klasse nicht schadet. und wie bei allen features meiner lib: du zahlt nicht dafuer, wenn du es nicht brauchst. einfach kein #include<cppgi/environment.h> und du sparst dir die klasse
den cookie code, habe ich dir schon im IRC gegeben, ansonsten http://sourceforge.net/projects/cppgi
das ist aber die alte version, die ich ja gerade redesignen will