我们正在使用Net Core,通过sql数据库实现Entity Framework。以前的软件仅具有数据模型和应用程序。
当前,我们正在获取数据级别的实体并将其映射到域层。
然后,整个应用程序与基于DDD的域模型层一起工作,而与数据库层和复杂性不符。
我们有异步方法。将Data对象带到Domain层时,我应该在哪里放置AutoMapper?
我正在阅读本文,并且1)直接将AutoMapper与Entity Framework结合使用是否有任何问题? 2)试图弄清楚这个新的Domain方法是否仍然可以异步工作((要确保由于Microsoft intellensense不会发送警告或错误,所以要确保)3)如果没有,如何将Automapper放置在哪里,同时将数据类映射到domain异步?
https://www.devtrends.co.uk/blog/stop-using-automapper-in-your-data-access-code
原始数据存储库:
public async Task<Product> GetByProductId(int id)
{
var product = await unitOfWork.DBSet<Product>().FindAsync(id);
return product;
}
public async Task<IEnumerable<Product>> GetAllActiveProducts()
{
var products = await unitOfWork.DBSet<Product>().ToListAsync();
return products ;
}
新域存储库:
public async Task<ProductModel> GetByProductId(int id)
{
var product= await unitOfWork.DBSet<Product>().FindAsync(id);
ProductModel productModel = mapper.Map<ProductModel>(product);
return productModel ;
}
public async Task<IEnumerable<ProductDomainModel>> GetAllActiveProducts()
{
var products = await unitOfWork.DBSet<Product>().ToListAsync();
IEnumerable<ProductDomainModel> productDomainModel = mapper.Map<IEnumerable<ProductDomainModel>>(products);
return productModel;
}
Well DDD不建议使用AutoMapper之类的基础架构来创建域模型。您可以在域对象本身(聚合根/实体)上使用工厂方法。
例如class ProductDomainModel {
private ProductDomainModel(){}
公共静态ProductDomainModel创建(prop1,prop2){
返回新的ProductDomainModel {prop1 = prop1,prop2 = prop2};}
}