Warum funktionieren Web-Entwicklungs-Frameworks in der Regel um die statischen Eigenschaften von Sprachen?

9

Ich war etwas überrascht, als ich anfing, Lift zu benutzen, wie stark es die Reflektion benutzt (oder scheint), es war etwas unerwartet in einer statisch typisierten funktionalen Sprache. Meine Erfahrung mit JSP war ähnlich.

Ich bin ziemlich neu in der Webentwicklung, also weiß ich nicht wirklich, wie diese Tools funktionieren, aber ich frage mich,

  1. Welche Aspekte der Webentwicklung fördern die Verwendung von Reflektion?

  2. Gibt es Werkzeuge (in statisch typisierten Sprachen), die (1) auf Code von einer vorlagenbezogenen (2) objektrelationalen Abbildung verweisen, so dass Reflektion nicht verwendet wird?

Owen 05.09.2011, 05:03
quelle

2 Antworten

2

Siehe Liftquelle. Für den Großteil des von mir untersuchten Codes wird keine Reflexion verwendet. Fast alles ist statisch getippt. Wenn Sie auf Aufzugansichten verweisen, werden sie als Xml-Knoten verarbeitet, auch dies ist keine Reflexion.

    
Khurram Ijaz 05.09.2011 06:40
quelle
2

Dies bezieht sich speziell auf das Problem <lift:Foo.bar/> :

Wenn <lift:Foo.bar/> im Code gefunden wird, macht Lift ein paar Vermutungen, wie der ursprüngliche Name hätte lauten sollen (andere Namenskonventionen) und ruft dann java.lang.Class.forName auf, um die Klasse zu erhalten. (Relevanter Code in LiftSession.scala und ClassHelpers.scala .) Er findet nur beim Booten registrierte addToPackages .

Beachten Sie, dass es auch möglich (und üblich) ist, Klassen und Methoden manuell zu registrieren. Die Konvention besagt immer noch, dass alle Transformationen die Form NodeSeq => NodeSeq haben müssen, da dies das einzige ist, was für eine nicht typisierte HTML / XHTML-Ausgabe Sinn macht.

Also, was Sie haben, ist Lifts interne Registrierung von Knotentransformationen auf der einen Seite und auf der anderen Seite die implizite Registrierung des Moduls. Beide Typen verwenden eine einfache Zeichenfolgensuche, um eine Methode auszuführen. Ich denke, es ist strittig, wenn man reflexionsbasierter ist als das andere.

    
Debilski 05.09.2011 08:59
quelle