这就是我要做的。
我有一个通用的存储库类Repository<TKey, TValue>
。它具有常用的存储库模式方法。
每个存储库都需要一个IContext<TKey, TValue>
在它的构造函数中,它提供了存储库的持久性。
我有专门的存储库,它由通用存储库和针对特定于专用对象的存储库操作量身定制的方法组成。因此,如果我有一个专门的 Kitten 对象存储库,它将具有 ClimbTree 方法(可能采用树对象),但没有 BuryBone(Bone 骨骼)方法。我说得不好的一点是,它在小猫和它的树之间建立了一种需要持久化的关联。void CleanWhiskers()
可能是一个更简单的例子。这将使小猫的胡须变得干净。
所以我现在正在考虑一个相关子对象持久化的方案,并开始怀疑我是否已经有点错误了。
我开始在存储库上使用稍微丑陋的方法来创建子对象。所以 Kitten 存储库会有一个方法CreateFurBall()
这会将一个 FurBall 对象添加到 Kitten 的 FurBall 集合中,并将一个 Furball 添加到要持久保存的 FurBall 存储库中(实际上是同一个对象)。
我现在已经更改为一个系统,其中有类似于 ObservableCollection 的东西,它会在添加 POCO 时通知其父存储库。因此,我可以创建一个 POCO 毛球并将其添加到集合中,然后该集合将自动注册到毛球存储库中。
首先,我将在上下文中实现 nHibernate,我认为这映射得相当好。这是一个非常开放的问题,对于以前走过这条路的任何人来说,你能看到任何让你“停下来!!”的东西吗?
我应该认为 ClimbTree()、BuryBone()、CreateFurBall() 和 CleanWhiskers() 等方法属于域对象,而不是存储库。
存储库应该处理聚合根的持久性 - 即让您查询 Kittens、保存和更新它们。
在实例化和持久化之间你想对小猫做的任何事情都是域的特权。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)