流程创建新的订单输入DDD方式

时间:2011-01-13 14:04:53

标签: process domain-driven-design creation

我是第一次探索领域驱动设计,并坚持一些我想讨论的问题。其中一个是......

我正在设计一个用于订单维护的Web应用程序。当用户创建新订单时,系统会打开一个新的订单输入屏幕。它将生成一个应用程序编号和一些与订单限制有关的预配置信息(来自数据库),用户必须选择该信息特定于正在创建的订单。

现在我想到的问题......

1。如何生成这个新的订单输入屏幕,其中生成了应用程序编号,并从DDD的角度从数据库中提取了一些信息?

2。我是否必须使用OrderFactory创建新订单(使用App#和限制填充),然后将其转换为DTO并将其发送到表示层?

3。在填写必要的详细信息后,当用户提交订单时,应该遵循哪些过程来坚持下去?说表示层在OrderDTO中发送到服务层然后服务层应该做什么?

2 个答案:

答案 0 :(得分:1)

以下是一个非常小的示例,它可以让您对生命周期有所了解。

请注意,这是一种传统的DDD样式,您可能希望将读取模型与写入模型(CQRS)分开,并使UI任务基于。

在演示代码(Controller)

var newOrder = _orderService.NewOrder(); // return a new DTO containing the generated id.
// Fill the updated info.
_orderService.SubmitOrder(updatedOrder);

在服务层(应用层)

public OrderDTO NewOrder()
{
  var newOrder = OrderFactory.CreateNew();     // Create a new order which generate an id
  return _mapper.Convert<OrderDTO>(newOrder);  // Construct OrderDTO for the new order
}

public void SubmitOrder(OrderDTO orderDTO)
{
  var order = _mapper.Convert<Order>(orderDTO); // Construct order entity from DTO
  order.Activate() // Call some business logic in the domain 
  _orderRepository.Save(order); // Save order in repository
}

答案 1 :(得分:0)

DDD就是捕捉用户意图。所以提出更多问题,比如

1)为什么用户想要创建订单 - 命令

2)用户创建订单后应该发生什么。这对于域模型意味着什么 - 来自域的事件

请查看CQRS模式以获取更多信息