2

「ProgrammingEntityFrameworkCodeFirst」で提案されているアーキテクチャパスに従っています。

DataAccessレイヤーとModelレイヤーがあり、どちらもVSで別々のプロジェクトを形成します。

Modelレイヤーは、ビジネスオブジェクトのクラスを保持します。DataAccessレイヤーにはModelプロジェクトへの参照があるため、各ビジネスオブジェクトのコンテキストとDbSetを作成できます。

問題は、モデル内の一部のクラスが計算を実行するためにデータレイヤーにアクセスする必要があることですが、循環参照が作成されるため、モデルプロジェクトでDataAccessレイヤーを参照できません。DataAccessレイヤーは、DbSetを作成できるように、Modelレイヤーを参照する必要があります。また、計算は読み取り専用であり、データベースに永続化されていないゲッターのみであることに注意してください。

私はこれについて何時間も探していて、有用な情報を見つけましたが、私は何か簡単なものが欠けていると思いますか?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 に答える