9

当我开始使用 Lift 时,我有点惊讶它使用反射的程度(或看起来如此),这在静态类型的函数式语言中有点出乎意料。我对 JSP 的体验与此类似。

我对网络开发很陌生,所以我真的不知道这些工具是如何工作的,但我想知道,

  1. Web 开发的哪些方面鼓励使用反射?

  2. 是否有任何工具(在静态类型语言中)以不使用反射的方式处理(1)引用模板页面中的代码(2)对象关系映射?

4

2 回答 2

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 回答
2

请参阅升力源。我研究过的大部分代码都没有使用反射。几乎所有东西都是静态类型的。如果您指的是提升视图,它们将作为 Xml 节点处理,这也不是反射。

于 2011-09-05T06:40:12.210 回答