java - Spring formBackingObject、业务对象创建和工厂

标签 java spring factory-pattern

在 Spring SimpleFormController 中使用业务对象作为 formBackingObjects 的设计问题。

我们的 Controller 的职责是允许最终用户向我们的 Web 应用程序添加新的业务对象。

因此,我们通过 formBackingObject(HttpServletRequest request) 方法传递业务对象。然而,我们遇到了一个难题。

我们用来创建新业务对象的工厂强制执行某些属性不能为空的业务规则。但由于我们不知道最终用户想要输入什么,所以我们一直在传递“合理的默认值”,例如“请输入您想要的名称”,但这充其量看起来很hackie/icky。

开发人员要做什么?我觉得这是典型的先有鸡还是先有蛋的问题。

我们所有的业务对象都基于接口(interface),我们是否应该创建一个代表业务对象的 stub ,将 stub 作为 formBackingObject 传递,然后在表单提交上将 stub 传递给工厂?或者我们不应该在 formBackingObject 中传递任何内容,然后手动从请求中收集提交的信息?

还有其他合理的想法/模式吗?

感谢您的宝贵时间。

最佳答案

我绝对不会选择不使用 formBackingObject 并手动收集信息的选项——这会消除 Spring MVC 的许多功能。

如果我是您,我只会创建一个新工厂或工厂方法,专门用于创建“未初始化”业务对象,并将其用作您的 formBackingObject。

另一种广泛使用的方法是根本不使用业务对象作为 formBackingObject,而是创建一个单独的传输对象,其唯一目的是作为 formBackingObject(然后为业务对象添加一个工厂方法,让您可以从传输对象初始化它)。这样做的一大优点是,如果您的业务对象内部有一个由其他对象组成的深层树,那么用作 formBackingObject 会变得很痛苦。如果您创建一个单独的传输对象仅用作 formBackingObject,则可以为其提供更扁平的结构。

关于java - Spring formBackingObject、业务对象创建和工厂,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1717018/

相关文章:

java - 为什么 Hibernate 不需要参数构造函数?

java - 无法显示变量

java - Thread.start() 在控制台上打印 0

java - Spring 和 jackson : set json ignore dynamically

Spring 属性占位符未在 jaxws :client (cxf) address property 中解析

c++ - 这是哪个设计模式 : Factory Method or Abstract Factory

c# - 工厂模式在工厂类中实例化类

java - Log4j 2 JSON 模式布局 + 记录 JSON 负载

java - 在 Z3 中有效地检查两个约束的句法等价性

html - 当用户无法使用 Spring Boot 登录时,如何在登录页面中显示错误消息?