所以,我注意到我绝对倾向于模式化我的Spring/Hibernate堆栈对象,如下所示:
- Foo控制器调用"FooService"
- FooService调用FooRepository.getById()方法来获取一些Foos.
- FooRepository进行一些Hibernate调用来加载Foo对象.
- FooService与Foos进行一些互动.它可以使用相关的TransactionalFooService来处理需要在事务中一起完成的事情.
- FooService要求FooRepository保存Foos.
这里的问题是Foos没有任何真正的逻辑.例如,如果每次Foo到期时都需要发送电子邮件,则不会调用Foo.expire().有一个对FooService.expireFoo(fooId)的调用.这有以下几种原因:
- 从Foo获取其他服务和对象很烦人.它不是Spring bean,而是由Hibernate加载的.
- 让Foo在事务上做几件事很烦人.
- 很难确定Foo是否应该负责选择何时保存自己.如果你调用foo.setName(),foo应该保持更改吗?它应该等到你调用foo.save()吗?foo.save()应该调用FooRepository.save(this)吗?
因此,出于这些原因,我的Spring域对象往往是带有一些验证逻辑的美化结构.也许这没关系.也许Web服务可以作为程序代码.也许随着新功能的编写,创建以新方式处理相同旧对象的新服务是可以接受的.
但是我想摆脱这种设计,我想知道其他Spring使用的是什么呢?你是否用装载时编织等花哨的技巧来对抗它(我觉得不舒服)?你有其他的伎俩吗?你认为程序是好的吗?