我们在UI中使用JSF,在业务层使用Spring,在持久层使用Hibernate。现在我的问题是如何将数据从JSF UI传递到Spring业务层。我可以直接在我的支持bean中使用我的业务对象,还是应该通过DTO在层之间传输数据?如果可能的话,可以用一段代码和那些相关网站向我解释清楚的解释吗?
答案 0 :(得分:2)
您的问题是一个设计问题,因此在不了解您的项目的任何具体内容的情况下非常广泛。我只会解决有关DTO与业务对象的问题,并提供一些指向其他答案的指针。
首先,我并不完全知道业务对象的含义。有关业务对象与实体与DTO与VO的讨论,请参阅this answer。
如果您使用Hibernate并且您的业务对象是hibernate实体,并且表示层和业务层是本地,您可以在表示层中使用实体< / strong>即可。这减少了样板代码并且工作正常。问题是如果您使用延迟加载,您可能需要依赖视图模式中的打开会话来确保您可以在表示层中延迟加载数据。有关详细信息,请参阅this answer。
如果您的业务层和表示层是远程(可能不是这种情况),则证明使用DTO在它们之间传输数据是合理的。此外,即使一切都是本地的,您也可以决定使用DTO来规避延迟加载的问题。在这种情况下,在将其传递到表示层之前,请确保急切加载 DTO中所需的所有内容。
这是一个非常高级别的概述,有关详细信息,请参阅How to model in Java EE。