我应该在 DDD 中的什么地方放置 class 结果?

Where should I put a class result in DDD?

给定一个 ReceiptValidator 接口和一个 GoogleReceiptValidator 实现 returns 几个数据,我应该把 ReceiptValidatorResult?

由于与ReceiptValidator相关,可以放在领域层。

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

这取决于您的"domain"以及收据的使用方式。一般来说,如果您有一项服务位于应用程序的边界上,就像我假设 GoogleReceiptValidator 所做的那样,您希望它 return 对您的域有意义的东西,例如 "Receipt" 对象。如果它是一个域服务(不位于边界),你仍然想要 return 对你的域有意义的东西,例如 "ValidReceipt" 或者 "InvalidReceipt" 如果它无效。

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

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