C# DDD、汽车制造商和工厂

C# DDD、汽车制造商和工厂,c#,domain-driven-design,automapper,factory,C#,Domain Driven Design,Automapper,Factory,我一直在研究DDD,看到了很多代码,以便在我目前的工作中构建一个新的api 让我们假设以下分层体系结构: Api 应用程序服务(这里是ViewModel) 域(这里有域服务和域模型) Infra 应用程序服务使用自动映射创建一个域模型对象,并将其传递给域服务层。对吗 如果我已经有一个域模型对象可以在那里使用,为什么我要使用工厂?我忽视工厂是错的吗 由于我使用自动映射器将视图模型对象映射到域模型对象,因此工厂显示在哪里? 我有一种感觉,我错过了一些重要的东西 应用程序服务使用Automapper创

我一直在研究DDD,看到了很多代码,以便在我目前的工作中构建一个新的api

让我们假设以下分层体系结构:

  • Api
  • 应用程序服务(这里是ViewModel)
  • 域(这里有域服务和域模型)
  • Infra
  • 应用程序服务使用自动映射创建一个域模型对象,并将其传递给域服务层。对吗

    如果我已经有一个域模型对象可以在那里使用,为什么我要使用工厂?我忽视工厂是错的吗

    由于我使用自动映射器视图模型对象映射到域模型对象,因此工厂显示在哪里? 我有一种感觉,我错过了一些重要的东西

    应用程序服务使用Automapper创建域模型对象,并将其传递给域服务层。对吗

    不,这就是你写积垢系统的方法。域实体应保护其自身的状态,并且应通过方法对域实体进行所有修改

    比如:

    var user = repos.Get(userId);
    user.ActivateAccount();
    repos.Update(user);
    
    因此,应用程序服务应该围绕动作建模,而不是仅仅传递看起来与域实体完全相似的DTO

    使用您的示例,我将如何传递新用户?我应该使用AutoMapper映射到DTO用户,并在域层调用工厂吗

    我将创建am user DTO,它将包含域实体user中的信息子集,只是成功创建用户所需的信息


    在应用程序服务中,您可以使用工厂创建实体,然后用DTO中的信息填充实体。我个人会创建一个没有工厂的实体,但在用户构造函数中提供必需的信息。

    我相信这个问题是一个很好的候选问题。谢谢Ray,我会在那里问。当然,该方法应该是在一个充当聚合根的域实体上。谢谢@jgauffin,以您的示例为例,如何传递新用户?我应该使用AutoMapper映射到DTO用户,并在域层中调用工厂吗?