Active Record模式,存储库模式和可测试性(在Java中)
||
以下旨在从Active Record模式和Repository模式中获得最大收益的方法的缺点(例如,在可测试性方面)有什么缺点?
每个持久对象都公开save()和delete()方法,但没有静态方法来加载自身或加载类似对象的列表:通过直接调用存储库来完成从上层的加载,以避免持久对象中使用静态方法。
\“ save()\”和\“ delete()\”方法仅是外观,它们被委托给存储库。
可测试性是否真的与此方法有关?即使使用纯粹的Active Record方法:是否存在信息系统,其中数据库逻辑仅代表整个业务逻辑的一小部分,并且在其中模拟数据库访问会很有趣?
编辑:这种方法需要持久性对象从实现\“ save()\”和\“ delete()\”的AbstractPersistentObject继承,它可以防止业务继承,但是我读它最好避免业务继承并替换它具有成分,因此可能是优点,而不是缺点...?
EDIT2:也许本文将更好地解释我要解决的问题:http://moleseyhill.com/blog/2009/07/13/active-record-verses-repository/
没有找到相关结果
已邀请:
1 个回复
了驳
和
方法?持久性不属于域模型。 我知道,您说过这些方法将委托给一个存储库,因此域模型(希望)不包含实际的持久性逻辑。但是,它如何知道应委托给哪个存储库? 如果要通过
方法调用服务定位器,则无法将实体保存到多个存储库。您还向调用者隐藏了对存储库的依赖,我认为这是一件坏事。 要解决这些问题,可以将存储库实例传递给
方法,如下所示:
但是这样的方法意味着调用者已经有一个存储库实例,因此他最好直接在存储库上调用“ 0”方法。域模型上的任何持久性方法都将过时。 也许我过分简化了您的问题。您要达到的目标是什么?您只想要the6ѭ语法,还是要解决更大的问题?