我是第一次探索领域驱动设计,并坚持一些我想讨论的问题。其中一个是......
我正在设计一个用于订单维护的Web应用程序。当用户创建新订单时,系统会打开一个新的订单输入屏幕。它将生成一个应用程序编号和一些与订单限制有关的预配置信息(来自数据库),用户必须选择该信息特定于正在创建的订单。
现在我想到的问题......
1。如何生成这个新的订单输入屏幕,其中生成了应用程序编号,并从DDD的角度从数据库中提取了一些信息?
2。我是否必须使用OrderFactory创建新订单(使用App#和限制填充),然后将其转换为DTO并将其发送到表示层?
3。在填写必要的详细信息后,当用户提交订单时,应该遵循哪些过程来坚持下去?说表示层在OrderDTO中发送到服务层然后服务层应该做什么?
答案 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模式以获取更多信息