干净的架构:用例混合

Clean architecture: use case mixing

我试图了解干净的架构是如何工作的,上一个项目我有一个用户,他可以添加支付卡并购买订阅(示例用例),但是当它是新用户时,添加和购买集成为一步

Use case sample

根据阅读的内容,它应该有两个“Interactors”,一个“AddPayment”和“Purchase”,但是...我怎么混合: 用户可以分开做,但是当他是新手时,他在注册过程中添加支付方式并一步完成,

我想我应该有一个“添加并支付”用例,但它会重复代码和破坏范式,我看到这些选项:

  1. 用重复代码制作第三个用例
  2. 从控制器合并
  3. 制作一个调用其他两个的用例

你是怎么解决的?

我通常创建一个 基本用例 来调用其他两个。对于这个基本用例,我定义了一个新的请求模型,其中包含其他请求模型。这同样适用于响应模型。但有时请求或响应模型有一些共同点,我会创建更多压缩模型。

我认为基本用例最适合用例 uml 模型的 include relationship

            +-----------+
            | AddAndPay |  
            +-----------+
             |         |
             V         V
         +-----+    +-----+
         | Add |    | Pay | 
         +-----+    +-----+

AddAndPay 用例还处理其中一个用例的失败。例如。如果付款失败,您可能不想添加支付卡。也许您必须调用 RemovePaymentCard 用例,或者您的事务边界是 AddAndPay 用例。