1

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

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

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

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

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

3. 填写完必要的细节后,当用户提交订单时,应该遵循什么流程来持久化它?说表示层将 OrderDTO 发送到服务层,然后服务层应该做什么?

4

2 回答 2

1

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

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

在演示代码(控制器)中

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
}
于 2011-10-23T10:30:11.740 回答
0

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

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

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

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

于 2011-10-21T16:39:34.013 回答