从子列表访问容器属性
本文关键字:属性 访问 列表 | 更新日期: 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) ;
}
}