假设我在EF代码的第一个上下文中有这个POCO。
class A {
//public properties
}
class AViewModel {
public int AvgSomething {get;set;}
public int CalculatedValue {get;set;}
//and so on, around 10 unique calculated values, based on the POCOs values.
//In the calculations, other POCOs are used
}
现在,我想从POCO创建视图模型,我不知道在哪里放置执行计算的代码。我不愿意把它作为POCO中的公共方法,因为我认为POCO应该保持简单。我不想把它放在视图模型中,因为我已经读过视图模型不应该包含方法。我不想把它放在控制器中因为它是很多代码。我正在考虑为我的POCO创建一堆扩展方法但是感觉不对,我不知道为什么。 我有一个简单的asp.net mvc应用程序与模型,模型的回购,视图模型,控制器,这就是全部。 BL缺少吗?我应该创建一堆NOPOCO(不仅仅是普通的旧CLR对象)来配合POCO吗?现在这会违反我的KISS信念!
总结一下,有一本典型的书籍asp.net mvc app,BL代码应该去哪里,如果不是POCO,VM或控制器?
答案 0 :(得分:1)
您可以考虑使用帮助程序类将POCO“转换”为视图模型,甚至使用扩展方法。这将使您可以轻松地将POCO转换为各自的视图模型,但仍然可以逻辑地分离逻辑和数据。它会是这样的:
public static class PocoExtentions
{
public static AViewModel ToViewModel(this A poco)
{
// convert poco to view-model logic
}
// more extension methods for other types of poco's...
}
使用方法简单而且非常棒:
AViewModel avm = aPoco.ToViewModel();