我正试图完全接受MVC方法提供的关注点分离,但遇到了一些我希望得到建议的障碍。对于没有存储在DB后端中,但可以直接从DB后端派生的字段,您应该如何处理/应该将代码放在哪里?
例如,我可能有一个表示一个人的模型。存储的信息可能包括他们的出生日期。显然,我可以由此计算出他们的当前年龄,但不会将其存储在数据库中。现在,我希望在使用Lambda访问person对象(可能选择超过某个年龄的每个人)时,将年龄视为一个字段。但是,如果我将代码放入模型中,我不是在破坏关注点的分离吗?即使我把它放在那里,当通过get访问字段时,还是在创建对象时,应该计算它?那道布的变化呢?年龄应该立即反映新值,还是只在写回记录时反映?
为了便于讨论,让我们假设计算需要相当长的时间来处理,因此我们希望最小化它的使用。
我希望这个问题是有意义的!
发布于 2017-03-06 01:38:58
由于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属性将可用于相应的视图,并且无需重新计算即可多次访问。
https://stackoverflow.com/questions/42611644
复制相似问题