9

Lift を使い始めたとき、リフレクションを多用している (またはそうしているように見える) ことに少し驚きました。JSP での私の経験も同様でした。

私は Web 開発にかなり慣れていないので、これらのツールがどのように機能するかはよくわかりませんが、疑問に思っているのは、

  1. リフレクションの使用を奨励する Web 開発の側面は何ですか?

  2. リフレクションを使用しない方法で、(1) テンプレート ページからのコードの参照 (2) オブジェクト リレーショナル マッピングを処理する (静的に型付けされた言語の) ツールはありますか?

4

2 に答える 2

2

リフトソースをご覧ください。私が研究したほとんどのコードではリフレクションを使用していません。ほとんどすべてが静的に型付けされます。リフト ビューを参照している場合、それらは Xml ノードとして処理されますが、それもリフレクションではありません。

于 2011-09-05T06:40:12.210 に答える
2

具体的には、<lift:Foo.bar/>問題を参照してください。

コード内でが<lift:Foo.bar/>検出されると、Lift は元の名前がどうあるべきか (異なる命名規則) をいくつか推測し、java.lang.Class.forNameクラスを取得するために呼び出します。(関連するコードはLiftSession.scala およびにあります。)ブート中にClassHelpers.scala登録されたクラスのみが検索されます。addToPackages

クラスとメソッドを手動で登録することも可能 (そして一般的) であることに注意してください。慣習は、すべての変換が形式でなければならないということです。これは、型指定NodeSeq => NodeSeqされていない HTML/XHTML 出力にとって理にかなっている唯一のものだからです。

したがって、一方には Lift のノード変換の内部レジストリーがあり、もう一方にはモジュールの暗黙的なレジストリーがあります。どちらのタイプも、単純な文字列ルックアップを使用してメソッドを実行します。一方が他方よりも反射に基づいている場合、それは議論の余地があると思います。

于 2011-09-05T08:59:47.057 に答える