我的存储库处理并为丰富的域模型提供持久性.我不想将贫血的Entity Framework数据实体暴露给我的业务层,所以我需要一些在它们之间进行映射的方法.
在大多数情况下,从数据实体构造域模型实例需要使用参数化构造函数和方法(因为它很丰富).它不像属性/字段匹配那么简单.AutoMapper可用于相反的情况(映射到数据实体),但不能用于创建域模型.
以下是我的存储库模式的核心.
在EntityFrameworkRepository类的工作有两个泛型类型:
TDomainModel:丰富的域模型TEntityModel:实体框架数据实体定义了两种抽象方法:
ToDataEntity(TDomainModel):转换为数据实体(for Add()和Update()方法)ToDomainModel(TEntityModel):构建域模型(用于Find()方法). 这些方法的具体实现将定义所讨论的存储库所需的映射.
public interface IRepository<T> where T : DomainModel
{
T Find(int id);
void Add(T item);
void Update(T item);
}
public abstract class EntityFrameworkRepository<TDomainModel, TEntityModel> : IRepository<TDomainModel>
where TDomainModel : DomainModel
where TEntityModel : EntityModel
{
public EntityFrameworkRepository(IUnitOfWork unitOfWork)
{
// ...
}
public virtual TDomainModel Find(int id)
{
var entity = context.Set<TEntityModel>().Find(id);
return ToDomainModel(entity);
}
public virtual void …Run Code Online (Sandbox Code Playgroud) .net domain-driven-design entity-framework repository-pattern onion-architecture
我目前正在开展一个项目,我们开始使用DDD方法构建应用程序.我们现在首先考虑使用Entity Framework 6代码来帮助我们处理数据持久性.我的问题是如何最好地处理我们的域对象和EF实体之间的数据映射?
根据DDD,有些类是实体,有些类具有@javax.persistence.Entity注释。他们应该是同一班吗?还是JPA实体应仅充当映射器(https://martinfowler.com/eaaCatalog/dataMapper.html)从数据库加载DDD实体(并将其存储)并保留在域模型之外的机制?
如果将数据库元数据分离并存储在外部(例如,以XML格式),会有所不同吗?如果此类是实体,边界在哪里?我认为从XSD(例如,使用JAXB)甚至使用MyBatis Generator从数据库生成的类都不是DDD中所理解的实体。