danke Dir.

Gruss

Alex

> -----Original Message-----
> From: [EMAIL PROTECTED] 
> [mailto:[EMAIL PROTECTED] On Behalf Of 
> Claudius Ceteras
> Sent: Saturday, March 05, 2005 11:02 AM
> To: framework.net@glengamoi.com
> Subject: RE: [Framework.net] Implementierung von FW: 
> [Coffeehouse] Freitag: Regeln parsen
> 
> > die Matches sind mir soweit klar.
> > Wie würdest Du die AND/OR Verküpfung implementieren?
> > Wo und wie würdest Du die Rekursion gestalten?
> 
> Pseudocode(Methodennamen der xml-API stimmen nicht etc.):
> 
> foreach (xmlnode rule in xmldoc.getNodes("/configuration/Rules/Rule")
> {
>       if(EvaluateNode(rule, "AND")) //implizites AND
>       {
>               schleife abbrechen und aktion aus rule anwenden.
>       }
> }
> 
> bool EvaluateNode(xmlnode node, string operator)
> {
>       bool ret = operator=="AND"? true : false;
>       foreach (xmlnode subnode in node.children)
>       {
>               bool result;
>               switch(subnode.nodename)
>               {
>                       case "Match":
>                               result = EvaluateMatchNode(subnode);
> //matches sind klar
>                               break;
>                       case "and":
>                               result = EvaluateNode(subnode, "AND");
> //rekursion
>                               break;
>                       case "or":
>                               result = EvaluateNode(subnode, "OR");
> //rekursion
>                               break;
>               }
>               ret = operator=="AND"? ret&&result : ret||result;
>       }
>       return ret;
> }
> 
> 
> - Beim operator würde man natürlich lieber einen eigenen enum-typ
> verwenden...
> - Zur Optimierung kannst Du noch kurzschluss-AND/OR 
> implementieren, d.h. bei
> AND wird beim ersten ergebnis mit false abgebrochen und false 
> zurückgegeben,
> beim OR wird beim ersten true abgebrochen und true 
> zurückgegeben, so dass
> weniger matches ausgewertet werden müssen.
> - Idee: <Match name="Cookies.Wert" ..> etc. => wenn nur ein 
> einfacher Name
> angegeben wird, wird im ganzen Request danach gesucht, ansonsten die
> UnterCollections 
> Cookies,Form,Headers,Querystring,ServerVariables, aber auch
> Session etc..
> <Match name="Session.UserType" type="string" value="Admin"/>
> - Idee: Neuer type für direkte Vergleiche etc.
> <Match name="Form.Passwort" type="operator:=="
> value="Form.PasswortWiederholung"/>
> - Eine weitere Optimierung: Du kannst so ne Art 
> Vorkompilierung beim ersten
> Laden der Rules machen (und diese cachen), indem Du Dir Hashtables
> erstellst, die angeben welche regel was braucht und dann 
> schlägst du nach
> und kannst vielleicht von vornherein einige regeln 
> ausschliessen, die du
> nicht testen brauchst, weil einfach die nötigen parameter gar 
> nicht aktuell
> da sind. Bei der vorkompilierung musst Du aufpassen, dass nur wirklich
> nötige parameter aufgenommen werden, wenn es also z.B. Ein OR 
> gibt, wird der
> parameter nur dann wirklich benötigt, wenn er in allen OR-Zweigen
> vorkommt...
> 
> 
> Gruss,
> 
> Claudius
> 
> _______________________________________________
> Framework.net Mailingliste, Postings senden an:
> Framework.net@glengamoi.com
> An-/Abmeldung und Suchfunktion unter:
> http://www.glengamoi.com/mailman/listinfo/framework.net
> 


_______________________________________________
Framework.net Mailingliste, Postings senden an:
Framework.net@glengamoi.com
An-/Abmeldung und Suchfunktion unter:
http://www.glengamoi.com/mailman/listinfo/framework.net

Antwort per Email an