2017-02-27 3 views
0

新しいプロジェクトに着手しています。ベテランの建築家/設計パターンの指導者からのガイダンスが必要です。C#で実行時に永続化レイヤを変更する方法

私の新しいプロジェクトには、クライアントが実行時にデータが格納される場所(例えば、社内のSQLデータベース、MS Exchange、Googleストレージなど)を決定するためのいくつかの永続レイヤが必要です。

機能は基本的に同じですが、それぞれのストレージ/実装が異なるだけです。

ここで私が探していないのは、自分の目的に合った最良のパターンを指し示しているだけで、道が変わるにつれて柔軟性を提供する方法です。私は必然的にいくつかの厄介なコードの匂いにつながる具体的な実装を避けようとしています。

私はそれが道に沿っていくつかの種類のDIを含むことを知っていますが、ここにポインタがあれば幸いです。

答えて

1

実際にあなたのケースに特別なことは何もありません。したがって、DIで標準的な慣行に従い、容器を使用してSimpleInjectorのようなタスクを楽にしてください。あなたのための主なポイントは、具体的なクラスに依存するのではなく、抽象化に基づいていなければなりません。そして、それはDIコンテナがあなたを整理するのに役立ちます。

など。ユーザーを保存する予定がある場合は、IUserRepositoryにはSaveUserの方法があります。次に、SqlUserRepository,GoogleStorageRepositoryなどを実装します。他のデータアクセスレイヤーインターフェイスについても同様です。これを行うだけであれば、必要に応じて実行時に必要なリポジトリを提供できるようにDIを設定する必要があります。直接GoogleStorageRepositoryなどに依存することを忘れないでください。ただし、共通のインターフェイスでのみ実行してください。私は、インターフェイス(およびDLが認識する対応するBIデータモデル)のプロジェクトを作成し、各実装ごとにプロジェクトを作成して、さらにそれを分離します。

1

リポジトリパターンはすべて、永続性レイヤーとビジネスレイヤーの間の分離を作成することです。

ウェブ上の多くの例は、データエンティティのラッパーとして使用するだけで間違っていることを示しています。それは間違っている。リポジトリクラス/インタフェースの設計は、最初のデータストアの外観からではなく、ビジネス要件によって行われるべきです。

これはあなたのユースケースに最適なパターンです。ビジネス層の観点からリポジトリインタフェースを定義し、MSSQLのような各データストアの実装を作成します。私はさらにその視点を実証するために、私のビジネス層にそのインターフェースを置いています。

関連する問題