【发布时间】:2017-10-05 22:42:37
【问题描述】:
我通常尝试将我的类设计为不可变类,因此在编码压力方面我有很多优势。
但是在使用 Spring 时,我有时会注意到框架在大多数情况下“不鼓励”这种设计,而是支持经典的 JavaBeans 设计:默认构造函数 + getters/setters强>。
我真的不喜欢 JavaBean 设计的对象,因为它们的疯狂 可变性。 所以我想知道我是否遗漏了什么......
我试图让我的类设计尽可能优雅和可重用,但框架需要更改此设计或以困难的方式允许它...
这是怎么回事?
【问题讨论】:
-
春天一般不会鼓励或阻止任何事情,所以我想知道你为什么这么认为。没有什么可以阻止您在 bean 中进行构造函数注入而不是 setter 注入(您也可以进行基于字段的注入)。唯一需要 getter/setter 的地方是在 web 层中进行数据绑定,但这适用于所有 web 框架,包括 JSF、Struts 等。
-
我认为您考虑的是 Web 绑定而不是 bean 创建,对吧?
-
如果您担心绑定到表单的视图模型类是可变的,Spring 也允许您使用不可变的视图模型类。您必须编写将表单字段转换为模型对象的代码。您需要为从表单字段填充的每个模型类编写类。这意味着您需要权衡不可变性的优势与 Spring MVC 提供的带有可变对象的自动表单绑定的优势。
-
@M.Deinum 是的,我说的是 Web 层端的数据绑定,还有模型/持久性端。
-
@davioooh 模型持久化方面不是Spring处理的,所以前面的抱怨应该针对当前的ORM。当涉及到 Web 绑定时,是的,开箱即用不支持不变性,但您可以在需要时编写自己的代码
标签: java spring spring-mvc