使用Wicket + Spring + Hibernate的三层应用程序。您将如何处理交易?

使用Wicket + Spring + Hibernate的三层应用程序。您将如何处理交易?,第1张

使用Wicket + Spring + Hibernate的三层应用程序。您将如何处理交易?

这实际上是个人喜好问题。

就个人而言,我喜欢在服务层设置事务边界。如果您开始考虑SOA,则对服务的每个调用都应该是独立的。如果您的视图层必须调用2个不同的服务(我们可以说这已经是代码味道了),那么这2个服务应该彼此独立运行,可以具有不同的事务配置,等等。服务还有助于确保在服务之外不会进行任何修改。

OTOH,您将不得不对服务中的工作进行更多思考(延迟加载,如果需要共同的事务性,则在同一服务方法中对功能进行分组等)。

一种可以帮助减少延迟加载错误的模式是在服务层之外使用Value
Object。服务应始终加载所需的所有数据并将其复制到VO。您失去了持久对象与视图层之间的直接映射(这意味着您必须编写更多代码),但是您可能会发现自己变得清晰起来…

编辑:
该决定将基于权衡取舍,因此我仍然认为,至少部分原因取决于个人喜好。服务层的事务对我来说更干净(更像SOA,逻辑明确地限制在服务层,不同的调用明显分开,…)。该方法的问题是LazyLoadingExceptions,可以使用VO来解决。如果VO只是持久性对象的副本,那么可以,这显然是对DRY原理的突破。如果像使用数据库视图一样使用VO,那么VO就是持久对象的简化。仍然需要编写更多代码,但可以使您的设计更加清晰。如果您需要插入某些授权方案,该功能将特别有用:如果某些字段仅对某些角色可见,



欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/5082543.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-11-16
下一篇2022-11-16

发表评论

登录后才能评论

评论列表(0条)

    保存