【发布时间】:2010-06-06 06:38:16
【问题描述】:
我们在 UI 中使用 JSF,在业务层使用 Spring,在持久层使用 Hibernate。现在我的问题是如何将数据从 JSF UI 传递到 Spring 业务层。我可以直接在我的支持 bean 中使用我的业务对象,还是应该通过 DTO 在层之间传输数据?如果可能的话,可以用一段代码和相关网站向我解释清楚吗?
【问题讨论】:
标签: java spring jsf jakarta-ee
我们在 UI 中使用 JSF,在业务层使用 Spring,在持久层使用 Hibernate。现在我的问题是如何将数据从 JSF UI 传递到 Spring 业务层。我可以直接在我的支持 bean 中使用我的业务对象,还是应该通过 DTO 在层之间传输数据?如果可能的话,可以用一段代码和相关网站向我解释清楚吗?
【问题讨论】:
标签: java spring jsf jakarta-ee
您的问题是一个设计问题,因此范围很广,对您的项目一无所知。我只会解决您关于 DTO 与业务对象的问题,并提供一些指向其他答案的指针。
首先,我不完全了解您所说的业务对象是什么意思。有关业务对象、实体、DTO 和 VO 的讨论,请参阅this answer。
如果你使用Hibernate,并且你的业务对象是hibernate实体,并且表现层和业务层是本地,你可以直接在表现层使用实体。这减少了样板代码并且工作正常。问题是,如果您使用延迟加载,您可能需要依赖 open session in view 模式来确保您可以延迟加载表示层中的数据。更多详情请见this answer。
如果您的业务层和表示层是远程(可能不是这种情况),则证明使用 DTO 在它们之间传输数据是合理的。此外,即使一切都是本地的,您也可以决定使用 DTO 来规避延迟加载的问题。在这种情况下,请确保在将 DTO 中所需的所有内容传递给表示层之前急切加载。
这是一个非常高级的概述,有关更多详细信息,请参阅How to model in Java EE。
【讨论】: