当前位置: 首页 > 知识库问答 >
问题:

在DDD(域驱动设计)的域层中,谁负责处理API请求

彭胡媚
2023-03-14

我是DDD的初学者。

我不知道谁负责有API请求的进程。
我不知道谁负责间接依赖于基础结构层的函数。
例如有Web API请求的函数。

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

// 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 });
    }
}
// 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 });
    }
}

我以为的模型

共有1个答案

史淳
2023-03-14

我是DDD的初学者。我不知道谁负责与API请求的过程。

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

因此,应用程序中的逻辑通常类似于...

Order order = orderRepository.get(orderId);
order.cancel();

但是谁来更新服务器中的数据库呢?如果order.cancel()只更新自己的内存,您的代码似乎还没有更新服务器中的数据库。这是我的想法。

这是个很重要的问题,不是吗?:)

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

beginTransaction();
Order order = orderRepository.get(orderId);
order.cancel();
commitTransaction();
beginTransaction();
Order order = orderRepository.get(orderId);
order.cancel();
orderRepository.save(order);
commitTransaction();
 类似资料:
  • 本文向大家介绍什么是领域驱动设计(DDD)相关面试题,主要包含被问及什么是领域驱动设计(DDD)时的应答技巧和注意事项,需要的朋友参考一下 专注于核心领域逻辑 在模型上找到综合的设计 不断与领域专家合作,改进应用程序模型并解决与领域相关的问题

  • 本文向大家介绍为什么需要域驱动设计(DDD)?相关面试题,主要包含被问及为什么需要域驱动设计(DDD)?时的应答技巧和注意事项,需要的朋友参考一下 映射领域 降低复杂性 可测试性 可维护性 知识丰富的设计 将业务和服务结合在一起 上下文集中 通用语言

  • 我正在学习DDD概念,为了加强我的理解,我正在研究一些现实世界的例子。 我知道一个聚合应该只有一个通过根实体的入口点,一个聚合应该只有一个存储库(如果我完全理解错了,请纠正我) 现在假设有特定类型的消耗品,并且这些消耗品是从配送中心发送的。发送特定类型的消耗品取决于它们的数量,我的意思是,如果其中一个消费者对A型和B型的临界数量为10,并且这些项目的数量低于10,那么配送中心发送A型和B型消耗品。

  • 我使用Jersey和嵌入式Tomcat开发了REST服务器。 当我的客户端使用Jersey向我的服务器发送请求并添加其值为UTF-8编码的请求参数时,我会收到服务器端解码的参数。 我的问题是,谁负责解码这个参数?是雄猫吗?球衣<我可以禁用此功能吗?

  • 本文向大家介绍谈一下领域驱动设计相关面试题,主要包含被问及谈一下领域驱动设计时的应答技巧和注意事项,需要的朋友参考一下 主要关注核心领域逻辑。基于领域的模型检测复杂设计。这涉及与公司层面领域方面的专家定期合作,以解决与领域相关的问题并改进应用程序的模型。在回答这个微服务面试问题时,您还需要提及DDD的核心基础知识。他们是: DDD主要关注领域逻辑和领域本身。 复杂的设计完全基于领域的模型。 为了改

  • null 到目前为止,很容易。如果我们试图将规范应用到存储库,而又不破坏DDD模式或存在性能问题,那么问题就会出现。 应用规范的可能方法: 1)经典方法:在领域层使用领域模型进行规范 null null 3)与2)类似,但将规范作为持久层的一部分 这不起作用,因为域层需要参考规范。它仍将取决于持久层。 我们将在持久层中拥有业务逻辑。这也违反了DDD模式 4)与3类似,但使用抽象规范作为接口 nul