【发布时间】:2016-05-27 11:25:46
【问题描述】:
我有一点问题。我是一名新开发人员,我对我的产品有“年龄标准”的看法。
这些选项是:“ 45”。
我需要处理的 json 看起来是这样的:
"age": {
"lessThan24": true,
"between24And35": true,
"between35And45": true,
"moreThan45": true
}
我的视图模型:
public class AgeCriterionViewModel
{
public bool? LessThan24 { get; set; }
public bool? Between24And35 { get; set; }
public bool? Between35And45 { get; set; }
public bool? MoreThan45 { get; set; }
}
还有我的领域模型:
public class AgeCriterion
{
public int? From { get; set; }
public int? To { get; set; }
}
所以这是我的问题。我需要将视图模型映射到域模型。但是这些布尔值是可以为空的,因此它们可以为空、假或真。 OLSO 它可以是多选的。因此,这些选项可能是“小于 24”和“介于 35 和 45 之间”或全部或没有。
我正在考虑构建一些糟糕的 BIG IF 构造。但是我如何检查所有选项?有什么好办法吗?
我现在有这个:
if (age == null)
return null;
AgeCriterion criterion = new AgeCriterion();
if (age.LessThan24.HasValue)
{
if (age.LessThan24.Value)
{
criterion.From = 0;
criterion.To = 24;
}
}
【问题讨论】:
-
将其分离出来,创建将可空布尔值转换为布尔值作为标准并重用的方法。至于一个好方法,不是我知道的,你必须在某处做 if 语句,但要让它可以重用代码以在未来拯救你自己
-
如果我检查
LessThan24&Between24And35,你如何管理标准? -
你可以创建枚举并使用像
var result = AgeCriterion.BelowTwentyFive | AgeCriterion.ThirtyToFourtyFive;这样的位掩码,检查这个:stackoverflow.com/questions/1030090/… -
@ThomasAyoub 在这种情况下,我会假设它是 0 到 35。一个更好的问题是,如果唯一选择的值是
LessThan24和MoreThan45,该怎么办?在这种情况下,您似乎需要多个AgeCriterion来表示模型。 -
@juharr 没错。单个
AgeCriterion不能代表所有可能的组合,我们假设与or组合。我还假设null表示do not apply,但不清楚应该如何处理false值?例如,LessThan24 == false可以被视为>= 24。
标签: c#