从DTO构建域对象

时间:2011-01-12 20:10:17

标签: .net object domain-driven-design dns factory

让我们看看典型的Web应用程序场景

  1. 用户点击“创建TEST应用程序”按钮,启动TEST申请表的获取请求(在本例中为.aspx)
  2. 在加载TEST表格之前

    一个。服务层请求TEST应用工厂创建域对象
    湾Factory初始化应用程序#和其他嵌套对象
    C。 Factory返回域对象
    d。服务可以帮助Assembler创建DTO并返回到表示层

  3. 用户填写数据并提交TEST申请表
  4. 表示层创建DTO并将其发送到服务层
  5. 问题

    1. 在用户提交数据进行验证后,系统应该如何从dto构建域对象?
    2. 我们应该使用工厂还是让mapper / assembler从DTO构建Domain对象?
    3. 如果我们使用mapper从dto构造域对象,那么它会破坏工厂规则:(
    4. 如果我们再次使用工厂,它会不会为域对象重新创建一个新的Application#?使用Assembler?
    5. 从DTO重新水化域对象

1 个答案:

答案 0 :(得分:3)

  

系统应如何在用户之后从dto构造域对象   提交数据进行验证?

从存储库/持久存储中检索它。

  

我们应该使用工厂还是让工厂   mapper / assembler构造域   来自DTO的对象?

都不是。

  

如果我们使用mapper构建   域名对象从dto然后它打破   工厂规则:(

工厂是错误的使用方法。工厂负责开始实体的生命周期。在您描述的场景中(据我所知),您已经拥有一个存在的实体。它的寿命已经开始。从您的存储库中检索它,不要创建另一个。

  

如果我们再次使用工厂不会   它重新创建一个新的Application#   域对象?

也许,这也是为什么工厂在这里使用错误的原因。

我对您的流程有疑问。你说:

  

在加载TEST表格之前

     

一个。服务层请求TEST   Application Factory以创建域   对象

     

湾工厂初始化   application#和其他嵌套对象

     

℃。 Factory 返回域对象

     

d。服务需要汇编程序的帮助   创建一个DTO并返回   表达层

但这意味着当用户查看网页时,您正在创建域实体。这似乎很不对劲。我想我很难看到如何将GET页面的请求视为创建域实体的请求?