1

私は2つのDBで動作するアプリケーションを開発中です。私はEF、リポジトリとUnitOfWorkパターンを使いたいです。クリーンなコードの原則とデザインパターンを学んでいますので、私は(考えていますが)主なアイデアを理解していますが、実装に少し苦労しています。私は多くの答えと記事を読んだが、それでも私の特定の問題にアイデアを完全に伝えることはできません。エンティティフレームワーク、リポジトリパターンと2つのDB

私は2つのDBを持っています。

  1. ERPシステムのレガシーDB。読み取りアクセスのみ(別名ERP-DB)。このDBから私は必要なすべての情報を取らなければなりません。
  2. Project-DB。作成する必要があり、そのために制限はありません。 (別名プロジェクト-DB

だから、最初、私は右の私は、DBを変更することはできませんので、私はDBFirstアプローチを使用する必要がありますERP-DBのために、私は誰にも使用することができ、プロジェクトDBのためにそれを理解している場合、 CodeFirstはおそらく最良のアプローチです(私はDDDをやろうとしているので)ので、まず私のドメインモデルを設計し、次に何が永続化されるかを定義することができます。

今1質問:

  • ERP-DBは非常に "一般的" であり、例えば、テーブル "記事" を持っています。ここでは、完成したビルドデバイスから組立部品まで、あらゆる種類の記事を見つけることができます。 したがって、DBFirstでは、EFが "Articles"というエンティティを生成します。しかし私はドメインモデルでそのようなクラスを使用したくないので、より良いクラスをtransmittertermometermeasureCellなどとしたいと思います。それらは「特定の」記事です。ですから、Articlesを別のドメインオブジェクトにマップする必要があります。

    • 私はそれをマニュアルで行う必要がありますか、またはEFがDBFirstで私のために行うことはできますか?
    • 手動であれば、ドメインオブジェクトごとにリポジトリを作成し、そこにマップロジックを置く必要がありますか?または、2つのリポジトリを作成する必要があります(データエンティティ用に1つ、ドメインオブジェクト用に1つ、次にマップロジックを配置する場所)。
    • いくつかの特定の記事は複数のarticleを含んでいます。つまり、transmittermeasureCellです。どちらのエンティティも同じテーブルにあります。だから私のTransmitterRepositoryは、トランスミッタを取得する方法を知っている方法、またはこのロジックを置く必要がある方法がありますか?

さて、プロジェクト-DBについて、私は私のドメインモデルに焦点を当て、永続化する必要があるかを定義するためにCodeFirstを使用することができます。ですから、私がこのアプローチを選択し、それを正しく理解すれば、ここで私のデータエンティティを私のドメインオブジェクトに直接マップすることができます。しかし私はそれを完全に理解していません。なぜなら、同じロジックを別の場所に置いているからです。レポジスではなく、オブジェクトに直接持っていますが、そこには何がありますか?

+0

[既存のデータベースに最初にコードする](https://msdn.microsoft.com/en-us/library/jj200620(v=11113).aspx)を実行できます。私はあなたの最後の質問を理解していません。 EFは単体であり、既に作業単位パターンを実装しているObject Relation Mapperです。リポジトリを使用するかどうかについての議論や議論がたくさんあります。 –

答えて

1

ERP-DBの場合は、既存のデータベースにコードの最初のアプローチを使用することはできますが、独自のマッピング構成を持ち、ターゲット表や列などの名前を変更する必要があります。articleテーブルの場合には、適切な溶液は、TPHのアプローチに基づいてhiearchyをモデル化するためのようだ:

http://www.learnentityframeworkcore.com/inheritance/table-per-hierarchy

だから、あなたのためにそれは抽象基底クラスarticleを作成することを意味し、その後クラスtransmitterなどをderrivedなり、次に、流暢なAPIを使ってマッピングを作成します。もちろん、articleテーブルには適切なディスクリミネータ列が必要です。

ここで私のTransmitterRepositoryにはトランスミッタを取得する方法、またはこのロジックをどこに置くべきかを知っている方法がありますか?

はい、これは標準的なケースです。あなたのリポジトリには、FindByIdメソッドがあります。

しかし、私はそこで "勝利"しますか?

データエンティティがなくなり、リポジトリ内のドメインエンティティにマッピングされることがなくなるため、コーディングが少なくなります。

関連する問題