Domain driven design 域驱动开发:检测更改(.NET)
我刚刚开始领域驱动设计,并试图将其应用于我当前的项目 我从一个纯域模型开始,现在坚持使用我的数据访问层。我有一个完全自制的数据访问层,因此这里没有任何著名的ORM工具可以应用 我不知道如何处理更新。假设我有以下对象:Domain driven design 域驱动开发:检测更改(.NET),domain-driven-design,data-access-layer,Domain Driven Design,Data Access Layer,我刚刚开始领域驱动设计,并试图将其应用于我当前的项目 我从一个纯域模型开始,现在坚持使用我的数据访问层。我有一个完全自制的数据访问层,因此这里没有任何著名的ORM工具可以应用 我不知道如何处理更新。假设我有以下对象: public class Document : Entity { public IPropertiesCollection Properties { get; set; } public IContents Contents { get; set; } } pu
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在存储库中实现向包中添加文档的单独方法
我想知道这些方法是否可行,或者将来会导致问题?或者还有其他选择?通常,变更跟踪将由诸如NHibernate之类的ORM处理。在您的情况下,您可以执行以下操作: 根据identity属性的值选择新文档。 在重新插入表之前发出SQL delete语句。
这两种方法的一个问题是文档集合可能很大,因此为每个PostalDocumentsPackage加载所有文档可能是一个瓶颈。此外,除了文档集合之外,还必须考虑是否需要对文档实体进行更改跟踪。如果是这样,那么您还需要为文档类实现更改跟踪。考虑到您没有使用ORM,我建议使用解决方案2,因为解决方案1将引导您重新实现更改跟踪,这将污染您的域类。你也可以考虑一种架构,其中改变跟踪是明确的。男孩,哦,孩子,恐怕你有很多工作要做。在模型中喷洒实体和存储库不会使其成为DDD。跟踪文档标识符,而不是跟踪文档。此外,由于您使用的是自定义持久性,请尝试进一步封装状态。首先考虑一个物体的行为,我保证,状态会自然地跟随。引用杰夫·阿特伍德的话:不要重新发明轮子,除非你计划学习更多关于轮子的知识。那么,你在学习ORMs吗?如果不是,为什么要重新发明ORM?