3

私はMVC3を使って新しいプロジェクトを開始しました。私はNuGetからEF4.1、Automapper、Ninject、PagedListを実装しました。新しいベンダーへの変換中に、1つのアプリケーションを2つのデータベースバックエンドに効果的にマッピングするにはどうすればよいですか?

IOCとインターフェイスを設定して、2日間パターンを洗い出しました。私は私のサービスを自分のコントローラに、私のサービスをリポジトリに、私のDbContextを私のリポジトリに注入しています。

私が残しているのは、動作するアプリケーションであり、すべてが良好です。私が抱えている問題は、代理店のメインシステムのベンダーを変更する過程にあるということです。これは、データベース構造が大きく変化することを意味します。

ICamaContextの2つの具体的な実装とICamaRepositoryの2つの具体的な実装を作成するのは正しいですか?データベースごとに1つ?各リポジトリで、ICamaRepositoryで定義された契約に一致するように、対応するdbsetsを自分のタイプにマップしますか?

これは意味があるかわかりません。つまり、どのDBバックエンドが使用されているかにかかわらず、私のサービスで何かを書き直したくないのです。

namespace search.Common.Repositories 
{ 
    public interface ICamaRepository 
    { 
     IQueryable<Parcel> GetParcels(); 
    } 

    public class AssessProCamaRepository : ICamaRepository 
    { 
     ICamaContext _db; 

     public AssessProCamaRepository(ICamaContext dataContext) 
     { 
      _db = dataContext; 
     } 


     public IQueryable<Parcel> GetParcels() 
     { 
      return from c in _db.DataProperty 
        select new Parcel 
        { 
         AccountNumber = c.AccountNumber      
        }; 

     } 
    } 
} 
+1

リポジトリでdbContextを抽象化する際のポイントは何ですか? – sos00

+0

私は確信していません、私はちょうどオンライン記事に従っていました。私は実際にサービスにコンテキストを直接注入するようにコードを修正しました。 –

答えて

1

妥当なアプローチのようです。しかし、データベース構造が大きく変化するため、古いデータベース構造と新しいデータベース構造の間で共通のリポジトリ・レイヤーを考え出すのは難しいでしょう。

また、データベースの違いによっては、すべてのリポジトリメソッドに対してIQueryableを返すことができない場合があります。

+0

私のアプローチを再考する必要があります。しかし、最終的には、私のサービスメソッドの名前/目的を変更する必要はありません。AutoMapperを使用してモデルをモデルにマッピングすることはできます。私は知らない...最終的に2つのサービスを書く必要があるかもしれませんか? –

+0

+1 FWIWでは、IQueryableでのインターフェイスの基礎となる潜在的な問題について詳しく説明します。http://stackoverflow.com/questions/1699607/asp-mvc-repository-that-reflects-iqueryable-but-not-linq-to- sql-ddd-how-to-que/1699756#1699756 –

+0

ところで、ここのキーワードは「挑戦している」と思います。私は同意するが、それは不可能ではない。キーは、ヘッダーインターフェイスの代わりにロールインターフェイスの観点からデータアクセスAPIを定義することにあります。 –

0

リポジトリのdbContextを抽象化しても、実際にはリポジトリ内の抽象化されたデータレイヤーを使用すると、それほど意味をなさないとは思えません。

IMO異なるデータアクセステクノロジ(または異なるORM)で使用可能(実装可能)な抽象レイヤを作成することはほとんど不可能です。データレイヤを抽象化するだけで、無駄が増えます。最後に、それぞれのリポジトリの2つのバージョンを作成することをお勧めします.1つは新しい構造用、もう1つは古い構造用に作成し、次にDIユニットは正しいものを使用することにします。

関連する問題