【问题标题】:KISS approach to business logic in Entity Framework [closed]实体框架中业务逻辑的 KISS 方法 [关闭]
【发布时间】:2014-08-10 19:52:34
【问题描述】:

假设我在 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 应用,BL 代码应该去哪里,如果不在 POCO、VM 或控制器中?

【问题讨论】:

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


    【解决方案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();
    

    【讨论】:

    • 有趣的解决方案,我喜欢它
    • 当然,您将向方法中添加逻辑所需的所有参数。我做的 MVC 不多,但如果我做了 - 我会去做。
    • 刚刚意识到如果视图模型需要由多个 pocos 组成,您的想法可能无法正常工作。 static AViewModel ToViewModel(this A poco, B poco2, C poco3)
    • @Balanikas 这是你的问题,这是要求吗?
    • 为什么会有问题?如果返回类型在逻辑上表示几个 pocos 的组合,请正确命名并从所有需要的 pocos 作为参数构造它。如果事先不知道 pocos 并且应该以某种方式读取,那是转换逻辑的一部分。请pastebin 一个不适用的例子。
    猜你喜欢
    • 2011-04-15
    • 2013-09-14
    • 2012-03-08
    • 1970-01-01
    • 2012-01-12
    • 2011-04-26
    • 1970-01-01
    • 2010-10-18
    • 2018-07-30
    相关资源
    最近更新 更多