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 um 😉

    Folgende 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 🙂


Anmelden zum Antworten