给定一个ReceiptValidator接口和一个返回多个数据的GoogleReceiptValidator实现,我应该把ReceiptValidatorResult放在哪里?
由于它与ReceiptValidator相关,因此可以放在域层中。
但是,如果另一个AppleReceiptValidator有不同的数据怎么办?ReceiptValidatorResult也应该是一个接口吗?
给定一个ReceiptValidator接口和一个返回多个数据的GoogleReceiptValidator实现,我应该把ReceiptValidatorResult放在哪里?
由于它与ReceiptValidator相关,因此可以放在域层中。
但是,如果另一个AppleReceiptValidator有不同的数据怎么办?ReceiptValidatorResult也应该是一个接口吗?
这取决于您的“域”以及收据的使用方式。一般来说,如果您有一个位于应用程序边界的服务,就像我假设的 GoogleReceiptValidator 那样,您希望它返回对您的域有意义的东西,例如“Receipt”对象。如果它是域服务(不在边界处),您仍然希望返回对您的域有意义的内容,例如“ValidReceipt”或“InvalidReceipt”(如果它无效)。
如果另一个收据验证器有不同的数据,你必须问自己是否关心数据。如果您不关心数据而只关心数据的有效性,那么您可以返回与上面相同的内容(validReceipt 或 InvalidReceipt)。如果您确实关心数据,则必须通过工厂提取您关心的内容并返回对您的域有意义的对象。
我认为我的回答的底线是,它是 AppleReceipt 还是 GoogleReceipt 的实现细节远没有您的域需要的重要。也就是说,一旦您在域中获取了您的信息,如果处理得当,您不应该关心它是 applereceipt 还是 googlereceipt。