目前我正在做一个使用Spring web-service、hibernate和JAXb的项目。
1)我已经使用IDE的hibernate代码生成生成hibernate bean,
2)此外,我还使用maven编译器生成了jaxb bean。
. .
现在,我的问题是,
1)这种方法正确吗?(有这么多豆子)。
2)我是否应该使用JAXb bean进行服务层的处理?如何保持层间的解耦?
3)或者,我是否需要创建另一组bean ?将(JAXb bean)映射到(新bean)到(hibernate bean)?
.
请告诉我你的看法?
谢谢,adi
你知道,你不可能让所有的东西都完全解耦。总会有一层知道其他两层。
通常当我设计三层架构时,比如:
- 服务层——可能使用JAXB,公开web服务或其他api的服务层
- 业务层-任何实际逻辑
- 持久化层- hibernate
我允许业务层了解服务层(JAXB)和持久性层(hibernate bean)。但是我不允许服务层和持久层相互了解。
注意:我是EclipseLink JAXB (MOXy)领导和JAXB 2 (JSR-222)专家组的成员。EclipseLink还提供了一个优秀的JPA实现(开源自TopLink)。
维护多个模型是有成本的。您添加的每个模型都引入了一个必须编写、测试和维护的bean到bean转换。
另一种方法是对JPA和JAXB绑定使用相同的bean。对于这个用例,从域模型开始并添加JAXB会更容易。JPA元数据将映射应用到XML和数据库。下面是利用单个模型创建RESTful web服务的示例:
- http://blog.bdoughan.com/2010/08/creating - restful web服务——部分- 35. - html
由于EclipseLink同时提供JAXB和JPA实现,因此我们提供了许多扩展以使其更容易:
- http://wiki.eclipse.org/EclipseLink/Examples/MOXy/JPA
- http://blog.bdoughan.com/2010/07/jpa-entities-to-xml-bidirectional.html
回应:
同意你说的话。但是,使用相同的bean将会耦合代码非常紧密,并且将高度依赖。1的变化图层的其他地方也需要修改。你说什么?
这完全取决于你如何看待事物。我对构建数据访问服务的偏好是设计和构建一个坚实的领域模型。然后使用JPA和JAXB解决对象关系和对象xml之间的阻抗不匹配。
单一模型方法
为JPA和JAXB使用一个模型意味着当您对模型进行更改时,您需要在那时决定如何为JPA和JAXB处理它(这可能是好的,也可能是坏的)。如果您不希望模型中的每个新添加都影响JAXB映射,您可以利用JAXB概念,如@XmlAccessorType(XmlAccessType.NONE)
。
- http://blog.bdoughan.com/2011/06/using-jaxbs-xmlaccessortype-to.html
两个(或更多)模型方法
当您想要添加映射到关系和XML的字段时,您需要将其添加到两个模型并添加必要的转换逻辑。在这种情况下,保持模型解耦是有代价的。