为什么web开发框架倾向于围绕语言的静态特性工作?



当我开始使用Lift时,我有点惊讶于它如此大量地使用反射(或似乎如此),这在静态类型的函数式语言中有点出乎意料。我使用JSP的经历与此相似。

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

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

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

请参阅升降机来源。我所研究的大多数代码都没有使用反射。几乎所有东西都是静态类型的。如果您指的是升降机视图,它们被处理为Xml节点,那也不是反射。

特指<lift:Foo.bar/>问题:

当代码中遇到<lift:Foo.bar/>时,Lift会猜测原始名称应该是什么(不同的命名约定),然后调用java.lang.Class.forName来获得该类。(相关代码见LiftSession.scalaClassHelpers.scala)它只会找到在启动期间注册在addToPackages的类。

注意,手动注册类和方法也是可能的(也是常见的)。惯例仍然是所有的转换必须是NodeSeq => NodeSeq的形式,因为这是唯一对无类型的HTML/XHTML输出有意义的东西。

因此,您拥有的是Lift的节点转换的内部注册表,而在另一边是模块的隐式注册表。这两种类型都使用简单的字符串查找来执行方法。我想这是有争议的,如果一个更基于反射比另一个。

最新更新