【发布时间】:2011-04-12 08:51:20
【问题描述】:
我在存储库模式方面遇到了一些问题。或者也许只是一些不清楚的点。为了解决这些问题,我有一个包含两个实体聚合的简单示例域。
public class Category
{
string Name {get;set;}
Category Parent {get;set;}
IList<Category> Children {get;set;}
}
public class Transaction
{
Category Owner {get;set;}
string Name
... bla bla
}
在这个特定的领域模型中,这两个不形成一个单一的聚合。因此,我为这两个实体中的每一个提供了两个标准的 IRepository 实现。
问题一:在处理验证时,例如删除类别,存储库需要进行关系检查。存储库与其他存储库对话(并因此被注入引用)并生成错误,从而使其与其他层保持整齐断开,或者他们是否将其委托给数据库层,这是一种常见的做法吗?
问题二:同样,在更新实体(聚合)时,通常需要对各个组件进行保存/更改/删除验证。大概只有当您有一个工作单元缓冲更改并且仅在所有验证成功时才提交时,这才是合理可行的?
问题三:不使用延迟加载时,加载单个类别会导致加载整个对象树。要限制这一点,唯一真正的选择是在您的实体中实现延迟加载和/或更改跟踪?
【问题讨论】:
-
删除存储库模式。不要试图拿起你不能携带的东西。如果 rdbms 在下面,抽象持久性几乎是不可能的。
标签: design-patterns domain-driven-design