【发布时间】:2016-12-20 15:49:45
【问题描述】:
如果我有一个具有内置逻辑属性的类,例如:
class myModelClass
{
public List<SummaryModel> Coupons {get;set;}
public decimal AlaCarteTotal
{
get
{
if (Coupons != null)
{
if (!Coupons.Any(x => x.GromotionApplied))
{
return Coupons.Sum(x => x.DefaultPrice);
}
return Coupons.Sum(x => x.GromotionApplied ? x.GromoPrice : x.DefaultPrice);
}
return default(decimal);
}
}
}
...将 Coupons 转换为具有如下支持字段会更好吗:
class myModelClass
{
public List<SummaryModel> Coupons
{
get
{
return _Coupons;
}
set
{
_Coupons = value;
}
}
public decimal AlaCarteTotal
{
get
{
if (_Coupons != null)
{
if (!_Coupons.Any(x => x.GromotionApplied))
{
return _Coupons.Sum(x => x.DefaultPrice);
}
return _Coupons.Sum(x => x.GromotionApplied ? x.GromoPrice : x.DefaultPrice);
}
return default(decimal);
}
}
}
更一般地说,当模型类包含某种 getter 逻辑时,是否应将属性转换为带有支持字段的属性?
【问题讨论】:
-
我很困惑...您的
Coupons属性没有任何逻辑。那么为什么要给它一个支持领域呢?AlaCarteTotal是带有逻辑的属性,但它不需要支持字段....有人可能会说将AlaCarteTotal转换为方法而不是属性更好... -
认为这个
List<SummaryModel> Coupons {get;set;}无论如何都会有支持的字段(如果你不这样做,编译器会这样做) -
也许题外话了,但看到 AlaCarteTotal 需要 Coupons 来计算它的总数(或检查是否存在),我会将 Coupons 作为参数传入并将其从属性更改为方法,并完全不需要单独的优惠券属性。
-
我相信这个问题只是关于寻求“最佳实践”。所描述的支持字段没有附加值,因此我不会仅仅为了拥有它们而添加它们。
标签: c# .net visual-studio visual-studio-2013