【问题标题】:Where should I put a class result in DDD?我应该将课程结果放在 DDD 的什么位置?
【发布时间】:2019-07-22 15:41:29
【问题描述】:

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

由于与ReceiptValidator相关,所以可以放在Domain Layer。

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

【问题讨论】:

    标签: domain-driven-design hexagonal-architecture


    【解决方案1】:

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

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

    我认为我的回答的底线是,它是 AppleReceipt 还是 GoogleReceipt 的实现细节远不如您的域需要的重要。也就是说,一旦您在域中获取了您的信息,如果处理得当,您不应该关心它是 applereceipt 还是 googlereceipt。

    【讨论】:

    • 这是正确的建模方法 ? 结果必须有意义并且与领域相关,独立于在特定工作流程中返回它的实际外部服务或基础设施。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-03
    • 1970-01-01
    • 2011-12-26
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多