java – 方面是否替换存储库?

我刚刚开始尝试Spring Roo.它可以很好地帮助构建具有集成持久性的域模型.由于它在方面添加了持久性功能,我开始考虑以下问题:

Roo在一个方面向实际的类/实体添加finders(从数据库中加载满足变量条件的类的实例).在DDD中,这是IMHO的存储库的责任.存储库是显示在设计中的显式类.当然,作为一个方面,存储库功能隐藏在实体中并且几乎不可见.

所以这里有一个问题:一个方面是否是显式存储库类的真正替代品? Roo AOP方法有任何缺点吗?

最佳答案
用户的角度来看,向域类添加查找器会感觉更自然,但它会混合您的图层. Grails使用相同的方法添加静态finder *()save(),…方法.

除了aestetics之外,它不会在Web应用程序设置中使用时具有实际缺点:
您的域类现在绑定到您的数据库.如果通过RMI或httpinvoker将这些对象传输到富客户端,则客户端不能并且通常不会使用find *方法,因为客户端上没有可用的会话/数据库连接.

我通常更喜欢允许域类引用服务层接口以防止贫血域模型(http://martinfowler.com/bliki/AnemicDomainModel.html).这有其自身的一些缺点,但至少提供了明确的界限.在客户端上,服务接口后面的具体实现可以只代理对服务器的所有方法调用(或者只使用带有spring remoting的synamic代理或类似的).

所以回答你的问题:它可能是一个替代品,但你应该知道可能的负面后果,使你的域类(即你的核心业务逻辑)在系统之间的可移植性降低.

相关文章

这篇文章主要介绍了spring的事务传播属性REQUIRED_NESTED的原...
今天小编给大家分享的是一文解析spring中事务的传播机制,相...
这篇文章主要介绍了SpringCloudAlibaba和SpringCloud有什么区...
本篇文章和大家了解一下SpringCloud整合XXL-Job的几个步骤。...
本篇文章和大家了解一下Spring延迟初始化会遇到什么问题。有...
这篇文章主要介绍了怎么使用Spring提供的不同缓存注解实现缓...