2009-07-22 5 views
1

BISDMの変更バージョンに基づいて、いくつかのデータベースエンティティのRESTfulサービスを作成しています。これらのエンティティの一部は、以下に示されるように、ルックアップテーブルが関連付けられている:リポジトリパターンを実装する際、ルックアップ値/テーブルに独自のリポジトリが必要ですか?

Snippet of modified BISDM schema

Iは、データ永続性/検索の間に明確な分離を提供するために、リポジトリのパターンを使用することを決定しました。しかし、(エンティティとは対照的に)ルックアップがどのようにリポジトリに表現されるべきかわかりません。

ルックアップは、独自のリポジトリインターフェイスを取得するか、関連するエンティティと1つ "共有"するか、または汎用のILookupRepositoryインターフェイスが必要ですか?

現在のところ、これらのルックアップは読み取り専用です。しかし、サービスを介してルックアップを編集したいときがあります。なお、この質問はlook-up tables & RESTful web servicesに関するものである。

答えて

3

いいえリポジトリは、エンティティレベルの概念ではなくドメインモデルの概念を表す必要がありますが、確かにデータベースレベルではありません。たとえば、Spacesのように、ドメインの特定のコンポーネントを使ってやりたいことを考えてみましょう。

あなたがしたいことの1つは、GetSpaceCategories()です。これは間違いなくSpacesリポジトリに含まれるはずです.Spacesを扱う人は、他のリポジトリをインスタンス化することなくSpaceカテゴリにアクセスしたいからです。

一般的なリポジトリは、私が考えるとかなり生産的になるでしょう。ユーティリティクラスのようなリポジトリを扱うことは、中程度に複雑な操作が両方のリポジトリをインスタンス化する必要があることを事実上保証します。

+0

このアプローチでは、UpdateSpaceCategory(SpaceCategory spaceCategory)とDeleteSpaceCategory(string id)もISpaceRepositoryにも正しいでしょうか? –

+0

確かに。リポジトリの目的は、基礎となるデータアクセスを隠すことです。データベースレイヤーを切り替える場合、残りのプログラムは依然としてリポジトリのGetCategories()またはUpdateCategory()を呼び出すことになります。変更はリポジトリコンシューマにとって透過的です。 – womp

関連する問題