这就是我要去的地方.
我有一个通用的Repository类Repository<TKey, TValue>.它具有通常的Repository模式方法.
每个存储库都IContext<TKey, TValue>在其构造函数中使用,该构造函数为存储库提供持久性.
我有专门的存储库,它们由通用的存储库组成,然后是针对专用对象特定的存储库操作定制的方法.因此,如果我有一个专门的Kitten对象存储库,它将有ClimbTree(可能采用树对象)但不是BuryBone(骨骼骨骼)方法的方法.我做得很糟糕的一点是它在小猫和它的树之间建立了一种需要持久化的关联.void CleanWhiskers()可能是一个更简单的例子.这使小猫的胡须清洁.
所以我现在正在考虑一个相关子对象持久性的方案,并开始怀疑我是否已经有点错误了.
我从存储库中稍微丑陋的方法开始创建子对象.因此,Kitten存储库将有一个方法CreateFurBall()可以将FurBall对象添加到Kitten的FurBall集合中,并将Furball添加到要保留的FurBall存储库(实际上是相同的对象).
我现在改为一个系统,我有一个类似于ObservableCollection的东西,它在添加POCO时通知其父存储库.所以我可以创建一个POCO furball并将其添加到集合中,然后将自动注册到furball存储库.
首先,我将在上下文中实现nHibernate,我认为这相当好.这是一个非常开放的问题,对于之前一直沿着这条路走下去的人来说,你能看到任何让你走"停!"的东西.
我应该认为ClimbTree(),BuryBone(),CreateFurBall()和CleanWhiskers()等方法属于域对象,而不属于存储库.
存储库应该处理聚合根的持久性 - 即让您查询小猫,保存并更新它们.你想要在实例化和持久性之间用小猫做的任何事情都是Domain的特权.