我开始使用 ASP.Net 编写领域驱动设计应用程序。 这对我来说是一个相对较新的主题,我想了解最佳实践。
使用 DDD 实体类作为 ASP.Net CRUD 操作的模型类是否正确,或者我们应该为此定义单独的 POCO 类?
下面的例子中,Skill可以是DDD实体类吗?
[HttpPost()]
public async Task<Skill?>? SaveSkill(Skill skill)
{
skillList.Add(skill);
return await Task.FromResult(skill); ;
}
这两种方法都适合我。 但是,我喜欢用工厂和私有 setter 来定义实体类,这种方式不起作用,因为 POST 需要默认的无参数构造函数。
这取决于您对 DDD 实体的理解。
如果DDD实体是由UI驱动的,则需要将其映射到实体,以允许前端和后端之间更大的灵活性。
因此,在这种情况下,您应该在前端和后端之间创建契约,这将是您的 DTO (POCO),然后将用于将数据保存在数据库中。
最有可能返回视图的实体也需要映射。
在项目的早期阶段,这种映射通常看起来是多余的,但随着时间的推移,DTO 中会添加更多信息,这些信息不适合数据库模型。
旁注
您的代码错误地保留了实体,它应该在添加实体后包含调用
DbContext.SaveChangesAsync
。