我应该将课程结果放在 DDD 中的哪里?

jer*_*kan 0 domain-driven-design hexagonal-architecture

给定一个ReceiptValidator接口和一个返回多个数据的GoogleReceiptValidator实现,我应该在哪里放置ReceiptValidatorResult

由于它与ReceiptValidator相关,因此可以将其放置在 Domain Layer 中。

但是,如果另一个AppleReceiptValidator有不同的数据怎么办?ReceiptValidatorResult也应该是一个接口吗?

Lou*_*uis 5

这取决于您的“域”以及收据的使用方式。一般来说,如果您有一个位于应用程序边界的服务(就像我假设的 GoogleReceiptValidator 一样),那么您希望它返回对您的域有意义的内容,例如“收据”对象。如果它是域服务(不在边界),您仍然希望返回对您的域有意义的内容,例如“ValidReceipt”或“InvalidReceipt”(如果它无效)。

如果另一个收据验证器有不同的数据,你必须问自己是否关心这些数据。如果您不关心数据而只关心数据的有效性,那么您可以像上面一样返回(validReceipt 或 InvalidReceipt)。如果您确实关心数据,则必须通过工厂提取您关心的数据,并返回对您的领域有意义的对象。

我认为我的回答的底线是,无论是 AppleReceipt 还是 GoogleReceipt 的实现细节远不如您的域需要的那么重要。也就是说,一旦您在域中获取信息,如果操作正确,您不应该关心它是 applereceipt 还是 googlereceipt。