我刚刚开始尝试Spring Roo.它可以很好地帮助构建具有集成持久性的域模型.由于它在方面添加了持久性功能,我开始考虑以下问题:
Roo在一个方面向实际的类/实体添加finders(从数据库中加载满足变量条件的类的实例).在DDD中,这是IMHO的存储库的责任.存储库是显示在设计中的显式类.当然,作为一个方面,存储库功能隐藏在实体中并且几乎不可见.
所以这里有一个问题:一个方面是否是显式存储库类的真正替代品? Roo AOP方法有任何缺点吗?
最佳答案
从用户的角度来看,向域类添加查找器会感觉更自然,但它会混合您的图层. Grails使用相同的方法添加静态finder *()save(),…方法.
原文链接:/spring/431414.html除了aestetics之外,它不会在Web应用程序设置中使用时具有实际缺点:
您的域类现在绑定到您的数据库.如果通过RMI或HttpInvoker将这些对象传输到富客户端,则客户端不能并且通常不会使用find *方法,因为客户端上没有可用的会话/数据库连接.
我通常更喜欢允许域类引用服务层接口以防止贫血域模型(http://martinfowler.com/bliki/AnemicDomainModel.html).这有其自身的一些缺点,但至少提供了明确的界限.在客户端上,服务接口后面的具体实现可以只代理对服务器的所有方法调用(或者只使用带有spring remoting的synamic代理或类似的).
所以回答你的问题:它可能是一个替代品,但你应该知道可能的负面后果,使你的域类(即你的核心业务逻辑)在系统之间的可移植性降低.