gpt4 book ai didi

domain-driven-design - DDD(Domain Driven Design)领域层API请求流程谁负责

转载 作者:行者123 更新时间:2023-12-04 17:41:35 28 4
gpt4 key购买 nike

我是 DDD 的初学者。

我不知道谁负责 API 请求的流程。
我不知道谁负责间接依赖于基础设施层的功能。
如带有 Web API 请求的函数。

例如我正在创建在线购物系统,系统支持取消订单。

我想我在域层有 2 个候选类来实现订单取消功能。
A:域名服务
B:域对象

但我无法判断哪个更好。

我担心设计“A”过于程序化,看起来乏善可陈。
我也担心设计“B”会使领域对象变得知识渊博和依赖。 (因为我认为对象应该尽可能简单)

设计候选人A

// Simple but anemic
class Order {
id: number;
date: Date;
state: OrderState;

constructor(
...
) {
...
}
}

// Procedural
class OrderService {
private readonly orderRepository: OrderRepository;

constructor(
orderRepository: OrderRepository
) {
...
}

cancel(orderId: number): void {
orderRepository.update(orderId, { state: OrderSate.Cancelled });
}
}

设计候选人B
// knowledgeable and dependent
class Order {
id: number;
date: Date;
state: OrderState;

private readonly orderRepository: OrderRepository;

constructor(
orderRepository: OrderRepository,
...
) {
...
}

cancel(): void {
orderRepository.update(this.id, { state: OrderSate.Cancelled });
}
}

The model I thought

最佳答案

I'm a beginner in DDD. I have no idea who is responsible for the process with API request.



业务逻辑属于领域模型,编排属于应用程序。

因此,您的应用程序中的逻辑通常看起来像......
Order order = orderRepository.get(orderId);
order.cancel();

Order 模型负责在 Order::cancel 时知道如何操作自己的内存数据结构。被调用。 OrderRepository 负责持久化。应用程序驱动其他两个元素的调用。

部分困惑是“服务”的概念被重载了。在 DDD 中,“域服务”指的是作为域模型一部分的模式(就像值对象和实体是域模型模式一样)。

更新 20190120

But who updates the database in the server? Your code seems that database in server has't been updated yet if order.cancel() update only own memory. This is my thinking.



这是一个非常重要的问题,不是吗? :)

当 Eric Evans 在他的书中第一次描述存储库模式时,他特意选择了一个具有集合语义的存储库模式,并建议事务管理应该成为应用程序的关注点。

在伪代码中:
beginTransaction();
Order order = orderRepository.get(orderId);
order.cancel();
commitTransaction();

这个概念是底层映射器可以查看存储库并发现哪些实体是“脏的”,从而生成对持久存储的适当调用。

最近,您更有可能看到具有存储而非集合语义的存储库
beginTransaction();
Order order = orderRepository.get(orderId);
order.cancel();
orderRepository.save(order);
commitTransaction();

基 native 制是相同的,但我们消除了共享更改方式的一些魔力。

关于domain-driven-design - DDD(Domain Driven Design)领域层API请求流程谁负责,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266155/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com