Php 以DDD方式与实体相关的外部第三方API

Php 以DDD方式与实体相关的外部第三方API,php,entity,domain-driven-design,Php,Entity,Domain Driven Design,我正在做一个新项目,我们将使用DDD。这里出现的问题是如何处理这样一种情况:在我看来,一个外部API与一个实体本身非常相关 想象一下实体卡。每个用户都可以拥有一张卡,类似于银行塑料卡,需要创建、激活、收费等 这里的问题是,该卡与管理卡创建、退款、激活等的外部API相关 以代码的方式,而不考虑基础设施,我这样看 new Card(); $card->isActive(); $card->refund(); 等等 但问题是,这个实体函数需要与真正创建所有这些操作的外部API联系。但对我

我正在做一个新项目,我们将使用DDD。这里出现的问题是如何处理这样一种情况:在我看来,一个外部API与一个实体本身非常相关

想象一下实体卡。每个用户都可以拥有一张卡,类似于银行塑料卡,需要创建、激活、收费等

这里的问题是,该卡与管理卡创建、退款、激活等的外部API相关

以代码的方式,而不考虑基础设施,我这样看

new Card();
$card->isActive();
$card->refund();
等等

但问题是,这个实体函数需要与真正创建所有这些操作的外部API联系。但对我来说,它看起来像基础设施,是领域模型本身之外的东西

从DDD的角度来看,这些实体能够连接到API并在内部调用API是否正确

使用一个具有以下特性的服务不是很接近DDD吗

$service->activateCard($card);
那么,$card->activate()方法会发生什么变化呢?在普适语言中,它对我来说是如此自然


谢谢

域事件浮现在脑海中。您可以让
发出
卡激活
卡退款
事件以及相关数据。它们将由知道如何与外部API通信的基础设施服务处理,让您的域层很高兴地不知道技术细节。

我唯一能看到的是,您必须在用于持久化AR的同一事务中处理事件。此外,我相信另一种方法,比如从应用程序服务调用cardService,或者将ICANRuish服务对象传递给card.return()操作可能是有意义的。PS:没有忘记联系你,我只是还没有时间;)但是,向实体注入依赖于基础设施的服务(第三方API)是一种好做法吗?@JonathanGimeno从技术上讲,只要注入这些服务,它仍然是松耦合的,所以我不会称之为坏做法。但是,我觉得如果域实体不知道在其实体工作完成后必须调用的外部事物,则可以实现更好的关注点分离。您最终找到了解决此问题的好方法吗?