从子列表访问容器属性

本文关键字:属性 访问 列表 | 更新日期: 2023-09-27 18:10:34

我有一个名为PaymentPlan的容器类,它保存基本的付款摘要信息。它还包含一个ExpectedPayments列表。希望这是一个相当基本的OOP类型问题,我的大脑似乎已经睡着了——我在ExpectedPayment类中有一个属性,它需要询问PaymentPlan类上的一个属性以确定结果。

我目前将对PaymentPlan的引用存储为ExpectedPayment类的属性,但是,它有一个公共getter,并且遵循DDD,我觉得这有点代码味道。有没有更好的方法来实现我想要的?

我已经删除了所有的,除了必要的位作为一个例子:

public class PaymentPlan
{
    private readonly List<ExpectedPayment> _payments;
    public PaymentPlan(List<ExpectedPayment> payments)
    {
        ... Other Stuff
        //TODO: Fix this smell
        _payments = payments;
        _payments.ForEach(p => p.Plan = this);
    }
    ... Other Properties
}

和ExpectedPayment类:

public class ExpectedPayment
{
    public ExpectedPayment(... Args removed for example)
    {
    }
    //TODO: Attempting to avoid this public setter as I have no control..
    public PaymentPlan Plan { get; set; }
    public PaymentState PaymentState
    {
        get
        {
            if (Plan.SomePropertyOnPlan == "SomeValue")
            {
                return PaymentState.SomeState;
            }
            else 
            {
                ... Other logic to determine the payment state of this expected payment.
            }
        }
    }
    ... Other Properties
}

感谢任何帮助!-如果可能的话,我想知道一些技术,因为我知道有多种方法可以实现我所追求的。

谢谢,亚历克斯

从子列表访问容器属性

如果ExpectedPayment没有任何PaymentPlan就不应该存在,您必须强制ExpectedPayment()构造函数向调用者提供PaymentPlan,并添加一个"友好"的方法来在PaymentPlan上添加新的ExpectedPlan

public class ExpectedPayment
{
    public ExpectedPayment(PaymentPlan plan, ..... other args)
    {
        Plan = plan ; 
        plan.AddExpectedPlan(this) ; 
        ......
    }
    ......

public class PaymentPlan 
{
    .........
    internal void AddExpectedPlan(ExpectedPlan expectedPlan) 
    { 
        ...........
        _payments.Add(expectedPlan) ; 
    } 
}