从子列表访问容器属性

时间:2014-06-27 09:14:59

标签: c# oop properties domain-driven-design parent-child

我有一个名为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

}

任何帮助表示赞赏! - 如果可能的话,我想知道一些技巧,因为知道有多种方法可以实现我的目标。

谢谢, 亚历克斯

1 个答案:

答案 0 :(得分:0)

如果ExpectedPayment没有任何PaymentPlan,就好像ExpectedPayment()不存在一样,您必须强制PaymentPlan构造函数向调用方提供ExpectedPlan添加一个友好的&#34;在PaymentPlan上添加新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) ; 
    } 
}

...

{{1}}