用MVC计算的字段

时间:2017-03-05 17:32:18

标签: asp.net-mvc

我正在努力完全接受MVC方法提供的问题的分离,但是我已经达成了一些障碍,我很欣赏这些建议。 您如何处理/在何处放置未存储在数据库后端的字段的代码,但可以直接从中派生?

例如,我可能有一个代表Person的模型。存储的信息可能包括他们的出生日期。显然,我可以从中计算出他们当前的年龄,但不会将其存储在数据库中。现在,我希望在使用Lambda访问person对象(可能选择超过特定年龄的每个人)时将age作为一个字段。但是,如果我将代码放入模型中,我是否打破了关注点的分离?即使我把它放在那里,是否应该通过get访问字段或者创建对象时进行计算? DOB的变化怎么样?年龄应该立即反映新值,还是仅在记录被写回时?

为了便于讨论,我们假设计算需要花费大量时间来处理,因此我们希望尽量减少其使用。

我希望这个问题有道理!

1 个答案:

答案 0 :(得分:2)

由于Age字段仅在某些视图上显示/需要,因此在相应的视图模型上具有此属性是有意义的。您可以使用一个函数来获取Person实例并计算其年龄。所以你的控制器看起来像这样:

public ActionResult Index(int id)
{
    Person person = GetFromDB(id);
    PersonViewModel viewModel = Map(person);
    return View(viewModel);
}

并在Map方法内:

public PersonViewModel Map(Person person)
{
    var result = new PersonViewModel();
    result.Age = GetAge(person.Dob);
    ... some other fields
    return result;
}

现在Age属性可用于相应的视图,可以多次访问而无需重新计算。