我正在做一个我们将使用DDD的新项目。这里出现的问题是如何处理在我看来与一个实体本身非常相关的外部API的情况。
想象实体Card。每个用户都可以拥有一张卡,类似于银行的塑料卡,该卡需要创建、激活、充值等。
这里的问题是该卡与管理卡创建、退款、激活等的外部API相关。
在没有考虑基础结构的情况下,我看到了这种方式。
new Card();
$card->isActive();
$card->refund();
等。
但是问题是这个实体函数需要与一个外部API联系它真正创建了所有的动作。但对我来说,它看起来像基础设施,是领域模型本身之外的东西。
从DDD的角度来看,这些实体能够连接到API并对其中的API进行调用是正确的吗?
使用一个服务来做一些:
$service->activateCard($card);
那么$card->activate()方法发生了什么,这些方法在通用语言中对我来说是如此自然?
谢谢! !
域事件。你可以让Card
发出CardActivated
, CardRefunded
事件和相关的数据。它们将由知道如何与外部API通信的基础设施服务处理,使您的域层愉快地不知道技术细节。