我们正在学习和实施领域驱动设计(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实体列表仅作为方法内部某些逻辑的基础,我们不会修改它们的状态或值。
我们在网上找到的大多数文章都建议传递其他聚合根,但不是同一类型。
对我来说,为什么要将一些
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) {
// ...
}
}
所以,简而言之。可以接受吗?当然,如果它符合您的需求,为什么不呢?但对我来说,为什么你需要这样做,这在逻辑上听起来有点奇怪。