实体框架中的业务逻辑的KISS方法

时间:2014-08-10 19:52:35

标签: c# asp.net-mvc entity-framework poco

假设我在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或控制器?

1 个答案:

答案 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();