繁体   English   中英

为什么人们使用Velocity和/或NVelocity?

[英]Why do people use Velocity and/or NVelocity?

在过去的一年里,我听到很多关于Velocity和NVelocity的消息。 阅读他们的文档并在网上搜索并没有给我我想要的答案。

在什么情况下我会在开发中使用这个库? 它解决了哪些问题尚未解决?

自Web应用程序诞生以来,人们开始考虑在许多应用程序中分离关注点,包括Web应用程序。 挑战在于将视图代码与业务代码或逻辑代码分开。 当jsps第一次到达时,许多人直接在jsps中编写大量逻辑(比如db访问等),打破了关注点分离的基本原则(jsps应该负责表示,而不是逻辑)。

Velocity,Freemarker和其他模板引擎可以分离UI逻辑和业务逻辑,从而促进演示中的更改,同时最大限度地减少业务方面的变化。 这些模板引擎具有执行常见UI任务的功能,例如,如果某些条件成立,则显示html块,或者在保持逻辑代码在视图外部的同时迭代列表。 这对于长期维护复杂的应用程序至关重要。

我认为重要的是要指出,与作为模板机制的JSP / ASP.NET相比,Velocity / NVelocity确实“ENFORCE”关注的分离。

使用JSP / ASP.NET的<%..%>,允许任何Java / .NET代码。 这就是为什么有时你会看到这些文件中的业务逻辑代码。

使用Velocity / NVelocity,您无法嵌入很长的代码系列。 相反,你真的被迫传递计算值,Velocity / NVelocity选择并根据模板的设计方式显示它们。

另一点是他们可以在Web容器环境之外工作(至少Velocity可以AFAIK)。 想象一下,您已经使用JSP / ASP.NET设计了一个报告模板。 它在网上运行良好。 然后突然有一个更改请求要从桌面应用程序完成。 您可以初始化Velocity / NVelocity,计算值,然后渲染模板,而不是在其中嵌入Web容器。

这是一个模板引擎。 如果您有大量混合了可变内容的静态文本,那么模板是减少您必须完成的工作量的好方法。 它比String.Format或连接加载要好得多,因为它不像重复或容易出错,并且更易于维护,因为你可以通过查看它来确切地弄清楚模板的功能。

1 - Velocity引擎实际上将实时数据与保存静态信息xyz.vm文件合并
2 - vm文件使用Velocity模板语言(VTL) (它可以迭代放置在上下文中的java可迭代java对象,可以调用放置在上下文中的对象可访问的方法)

使用Velocity的情况 -
1 - 当您必须生成具有不同数据和常量样式的报告邮件时(foreach支持)
2 - 当您想要在深层嵌套的内容中将实时数据与虚拟的Place-Holder合并时
3 - 当你想根据数据的价值决定风格信息时(如果支持的话)
还有很多
请参阅 - http://velocity.apache.org/engine/releases/velocity-1.5/user-guide.html

我们使用模板生成配置文件,用于生产,UAT,系统测试,应急系统等。

我们有一个主Spring配置文件,我们在其中注入一个属性文件。 我们有一个由Velocity解析的主属性文件,这允许我们将所有系统设置保存在一个文件中。

作为奖励,对于感兴趣的人,我建议阅读以下内容:

这些是关于StringTemplate的链接,这是一个由Terence Parr编写的模板引擎,后者编写了antlr,一个在任何地方都使用的解析器(例如:hibernate使用antlr)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM