域驱动开发:检测更改(.NET)

时间:2011-12-27 18:37:47

标签: domain-driven-design data-access-layer

我刚开始使用Domain Driven Design并尝试将其应用于我当前的项目。

我开始使用纯域模型,现在仍然使用我的数据访问层。我有一个完全自制的数据访问层,因此这里不能应用任何众所周知的ORM工具。

我无法弄清楚如何处理更新。假设我有以下对象:

public class Document : Entity
{
    public IPropertiesCollection Properties { get; set; }

    public IContents Contents { get; set; }
}

public class PostalDocumentsPackage : Entity
{
    public String Name { get; set; }

    public DateTime DeliverDate { get; set; }

    public ICollection<Document> Documents { get; set; } 
}

我有相应的存储库IDocumentsRepository和IPostalDocumentPackagesRepository用于检索对象(暂时)。

我现在处理的问题是当我想添加一个新文件的情况时,执行PostalDocumentsPackage的文档集合。基本上我在这里看到两种可能的情况:

1)实现跟踪原始集合中的更改的集合,并保存已更新\删除的项目列表。

2)在存储库中实现单独的方法,以便将文档添加到包中。

我想知道这些方法是否正常或将来会导致问题?还是有其他选择?

1 个答案:

答案 0 :(得分:0)

通常,更改跟踪将由诸如NHibernate之类的ORM处理。在您的情况下,您可以执行以下操作:

  • 根据身份属性的值选择新文档。
  • 在重新插入表格之前发出SQL删除语句。

任何一种方法的问题都是文档集可能很大,因此加载每个PostalDocumentsPackage的所有文档可能是一个瓶颈。此外,除了文档集之外,您还必须考虑是否需要对Document实体进行更改跟踪。如果是这样,那么您还需要为Document类实现更改跟踪。鉴于您没有使用ORM,我建议使用解决方案#2,因为解决方案#1会引导您重新实现更改跟踪,这会污染您的域类。您还可以考虑CQRS/Event Sourcing架构,其中明确更改跟踪。