Spring术语中的命令,表单,业务和实体对象之间的区别?

时间:2012-07-13 17:48:47

标签: java spring spring-mvc

我试图在松耦合系统方面围绕这些对象之间的差异。业务对象是否与实体对象相同?我可以在MVC中使用业务或实体对象作为我的命令对象吗?命令对象与表单对象相同吗?只是在寻找Spring术语和用法中对象类型的说明。

我在stackoverflow上发现了一些问题,但没有任何问题可以解释。

Spring Web MVC文档似乎说你可以使用你的业务(实体?)对象作为你的命令/表单对象,但这不会违背关注点分离吗?

来自Spring Docs:

  

可重复使用的业务代码,无需重复。将现有业务对象用作命令或表单对象,而不是镜像它们以扩展特定的框架基类。

1 个答案:

答案 0 :(得分:11)

1)从技术上讲,业务对象和业务实体(或称为“实体对象”)并不相同。

商业实体包含数据。业务对象包含有关业务实体的逻辑(如何创建实体,如何更新实体等)。业务对象在技术上是一个旧的J2EE模式,我还没有在当前的代码中看到它,所以我不能详细说明。有些人会说业务对象与DAO相对应,而其他人则更愿意说服务。有些开发人员只是说业务对象和实体是相同的,因为他们认为“对象”和“实体”具有相同的粒度,或者因为他们的业务实体也包含逻辑,或者仅仅因为他们不知道。我只是想讨论包含数据的对象的“(业务)实体”,而我从不使用术语“业务对象”,因为它可以有不同的解释。

2)根据Spring MVC文档,命令对象是一个JavaBean,它将填充表单中的数据。另一方面,什么是表单对象,而是支持表单的对象?

所以,是的,命令对象在语义上与表单对象相同。我更喜欢术语形式对象,我发现它很容易理解。

3)正如你所说,根据Spring MVC文档,框架的一个特性是

  

可重复使用的业务代码,无需重复。 使用现有业务   对象作为命令或表单对象而不是镜像来扩展   一个特定的框架基类。

所以是的,您可以 - 并且您应该根据Spring使用业务实体作为您的命令/表单对象。如果你不相信,这里有一些原因:

  • 为了简单起见。上帝知道我们的Java软件架构需要更简单。有些公司使用太多层来做非常简单的事情。在Spring,Java(见下文)等等的带领下,我们采取了很多措施来解决这个问题。
  • 为了您自己,因为它使编程更简单,更容易和更有趣
  • 因为Spring和Java(通过JSR)说出来。确实:我们对表单对象有什么期望?形成支持,可能还有一些验证。我们如何进行此验证? Spring MVC 3支持使用JSR-303 @Valid注释验证@Controller输入。我们将约束置于何处进行验证?根据JSR-303,存储这些约束的最佳位置(@NotNull,@ Length等)属于业务实体本身。底线:最好使用业务实体作为命令/表单对象。
  • 关注点的分离仍然受到尊重。这只是一个问题(形式支持)不再是一个问题! Spring MVC为您处理它。 :-)你只需要担心你的业务实体。