2

我正在遵循“Programming Entity Framework Code First”中提出的建议架构路径。

在 VS 中有一个 DataAccess 层和一个 Model 层,它们都形成了单独的项目。

模型层包含我的业务对象类。DataAccess 层具有对 Model 项目的引用,因此它可以为我的每个业务对象创建上下文和 DbSet。

问题是模型中的某些类需要访问数据层来执行计算,但是我不能在模型项目中引用数据访问层,因为它会创建循环引用。DataAccess 层必须引用 Model 层,以便它可以创建 DbSet。另请注意,计算是只读的——只有 getter,不会持久化到数据库中。

我已经为此搜索了几个小时并找到了有用的信息,但我想我错过了一些简单的东西?POCO 类本来就是简单的,但我的类代表的东西有一些非常相关但更复杂的计算。

作为一个简单的具体示例,我有一个 Transaction 类和一个 AccountBalance 类。Transaction 类需要知道特定日期的 AccountBalance 以用于显示目的——例如百分比变化(这只是一个简单的示例):

公共类事务

{
    public DateTime Date { get; set; }
    public string Description { get; set; }    
        ... etc    
    public double PercentageChange
    {
        get
        {
            // return TransactionAmount / AccountBalance on TransactionDate    
            //  however Transaction has no knowledge of AccountBalance... 
         }
    }
}

谢谢

4

1 回答 1

2

就我个人而言,我不会业务逻辑放在我的 POCO 中。恕我直言,您需要创建一个单独的服务层(或您所称的任何名称)并将业务逻辑放在那里。POCO 应该是没有任何业务逻辑的简单对象。

因此,您的架构将如下所示:

GUI -> 服务层 -> 数据访问层(存储库?) -> 数据库。

现在您的所有项目都可以引用您的模型层。

于 2012-11-24T01:00:12.790 回答