将相同聚合根类型的列表传递给领域驱动设计(DDD)中的方法是否可以接受

问题描述 投票:0回答:1

我们正在学习和实施领域驱动设计(DDD),我们有一个示例实体如下:付款

我的问题是,将 Payment 实体列表传递给 AllocatePayment 方法是否可以接受?请参阅下面的示例代码:

public class Payment : AggregateRoot {

     public List<PaymentDetails> PaymentDetails { get; set; }

     void AllocatePayment(List<Payment> payments) {
         // Change the state of payment details based on the list of payments
     }
}

这个Payment实体列表仅作为方法内部某些逻辑的基础,我们不会修改它们的状态或值。

我们在网上找到的大多数文章都建议传递其他聚合根,但不是同一类型。

.net aggregate domain-driven-design entity clean-architecture
1个回答
0
投票

对我来说,为什么要将一些

Payment
传递给另一个
Payment
,这在逻辑上听起来有点奇怪。也许你需要区分付款或其他什么。我不知道上下文。

关键是

Payment
聚合根可能已经拥有更新其内部状态所需的所有信息,独立于其他支付。

public class Payment : IAggregateRoot {

     // note public getter and private setter, should only be accessable to modify from a function in this class instance.
     public List<PaymentDetails> PaymentDetails { get; private set; } 

     void AllocatePayment(List<Payment> otherPayments) {
         // ...         
     }
}

所以,简而言之。可以接受吗?当然,如果它符合您的需求,为什么不呢?但对我来说,为什么你需要这样做,这在逻辑上听起来有点奇怪。

© www.soinside.com 2019 - 2024. All rights reserved.