我刚开始使用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)在存储库中实现单独的方法,以便将文档添加到包中。
我想知道这些方法是否正常或将来会导致问题?还是有其他选择?
答案 0 :(得分:0)
通常,更改跟踪将由诸如NHibernate之类的ORM处理。在您的情况下,您可以执行以下操作:
任何一种方法的问题都是文档集可能很大,因此加载每个PostalDocumentsPackage
的所有文档可能是一个瓶颈。此外,除了文档集之外,您还必须考虑是否需要对Document
实体进行更改跟踪。如果是这样,那么您还需要为Document
类实现更改跟踪。鉴于您没有使用ORM,我建议使用解决方案#2,因为解决方案#1会引导您重新实现更改跟踪,这会污染您的域类。您还可以考虑CQRS/Event Sourcing架构,其中明确更改跟踪。