私は2つのDBで動作するアプリケーションを開発中です。私はEF、リポジトリとUnitOfWorkパターンを使いたいです。クリーンなコードの原則とデザインパターンを学んでいますので、私は(考えていますが)主なアイデアを理解していますが、実装に少し苦労しています。私は多くの答えと記事を読んだが、それでも私の特定の問題にアイデアを完全に伝えることはできません。エンティティフレームワーク、リポジトリパターンと2つのDB
私は2つのDBを持っています。
- ERPシステムのレガシーDB。読み取りアクセスのみ(別名ERP-DB)。このDBから私は必要なすべての情報を取らなければなりません。
- Project-DB。作成する必要があり、そのために制限はありません。 (別名プロジェクト-DB)
だから、最初、私は右の私は、DBを変更することはできませんので、私はDBFirstアプローチを使用する必要がありますERP-DBのために、私は誰にも使用することができ、プロジェクトDBのためにそれを理解している場合、 CodeFirstはおそらく最良のアプローチです(私はDDDをやろうとしているので)ので、まず私のドメインモデルを設計し、次に何が永続化されるかを定義することができます。
今1質問:ERP-DBは非常に "一般的" であり、例えば、テーブル "記事" を持っています。ここでは、完成したビルドデバイスから組立部品まで、あらゆる種類の記事を見つけることができます。 したがって、DBFirstでは、EFが "Articles"というエンティティを生成します。しかし私はドメインモデルでそのようなクラスを使用したくないので、より良いクラスを
transmitter
、termometer
、measureCell
などとしたいと思います。それらは「特定の」記事です。ですから、Articles
を別のドメインオブジェクトにマップする必要があります。- 私はそれをマニュアルで行う必要がありますか、またはEFがDBFirstで私のために行うことはできますか?
- 手動であれば、ドメインオブジェクトごとにリポジトリを作成し、そこにマップロジックを置く必要がありますか?または、2つのリポジトリを作成する必要があります(データエンティティ用に1つ、ドメインオブジェクト用に1つ、次にマップロジックを配置する場所)。
- いくつかの特定の記事は複数の
article
を含んでいます。つまり、transmitter
はmeasureCell
です。どちらのエンティティも同じテーブルにあります。だから私のTransmitterRepository
は、トランスミッタを取得する方法を知っている方法、またはこのロジックを置く必要がある方法がありますか?
さて、プロジェクト-DBについて、私は私のドメインモデルに焦点を当て、永続化する必要があるかを定義するためにCodeFirstを使用することができます。ですから、私がこのアプローチを選択し、それを正しく理解すれば、ここで私のデータエンティティを私のドメインオブジェクトに直接マップすることができます。しかし私はそれを完全に理解していません。なぜなら、同じロジックを別の場所に置いているからです。レポジスではなく、オブジェクトに直接持っていますが、そこには何がありますか?
[既存のデータベースに最初にコードする](https://msdn.microsoft.com/en-us/library/jj200620(v=11113).aspx)を実行できます。私はあなたの最後の質問を理解していません。 EFは単体であり、既に作業単位パターンを実装しているObject Relation Mapperです。リポジトリを使用するかどうかについての議論や議論がたくさんあります。 –