【问题标题】:the best "place" to invoke business logic in a Tapestry page?在 Tapestry 页面中调用业务逻辑的最佳“位置”?
【发布时间】:2016-03-15 08:57:40
【问题描述】:
[Tapestry 版本:5.4-rc-1]
在 Tapestry 页面中放置/调用业务逻辑的最佳“位置”是什么?我可以看到很多使用onValidate() 方法的示例(验证结束时表单触发的验证事件)。
目前我这样做:
- 在表单提交事件处理程序中:我只是将“表单上下文”存储在一个变量中(类似于:“addThis”、“removeThat”、“partialUpdate”、“save”)。这是因为我可以从不同的提交/链接提交组件触发表单提交 - 可能执行不同的业务逻辑
-
onValidate() 方法内部:我验证接收到的数据并使用“表单上下文”执行/调用不同的业务逻辑
- 在
onSuccess() 或onFailure() 内部:我只想渲染区域/加载一些javascript 函数/准备消息以进行可视化
我不喜欢过多地将业务逻辑与验证“混合”,我想知道是否有人会提出不同/更好的方法 - 我看到的唯一选择是将所有内容移到 onSuccess() 中并处理最终的异常在那里。
【问题讨论】:
标签:
java
validation
web-applications
tapestry
business-logic
【解决方案1】:
我认为确定您所指的“业务逻辑”是有意义的。您是否使用您的服务来验证某些东西,显而易见的地方是onValidate()。我们使用的验证业务逻辑的一个示例是通过执行 DNS MX 记录检查来确保电子邮件的域确实存在。或者检查用户名是否已经存在。
我们总是将任何CRUD 服务调用放在onSuccess() 方法中,然后准备结果视图并返回它。
我们只使用onFailure() 来准备视图,以防onValidate()(在表单级别或单个字段级别)抛出某种ValidationException。在我们的例子中,onFailure() 从不调用任何业务逻辑。
如果您确实有多个提交按钮,则使用局部变量来存储调用了哪个按钮,以便您随后的 onValidate()、onSuccess() 和 onFailure() 知道向它们请求什么是我们也使用的技巧。
在您的问题中,缺少一种我们经常使用的方法,即onPrepare(Context formContext) 使用传入的上下文设置表单处理。确保您不会在 HttpSession 中和/或在循环内使用表单时非常有用。