私はDDDを使用してWCFサービスを設計しています。 ドメインオブジェクトを作成するためにリポジトリを呼び出すドメインサービスレイヤがあります。リポジトリは、ORMではなくADO.Netを使用して実装されています。データはStored Procsを使用してDBから得られます。オブジェクトを作成している間は、SPは状態のIDを返します。 SPはアドレステーブルと状態テーブルを結合しません。状態は、id、abbr、およびnameプロパティを持つ値オブジェクトクラスStateによって表されます。状態オブジェクトのリストは、アプリケーションが非揮発性データであるため起動するときに(system.runtime.caching.memorycacheを使用して)キャッシュできます。一般的に私はテーブルからすべてのそのようなルックアップデータを取得できるLookupDataRepositoryを持っています。これで、AddressRepositoryはstateのIDからアドレスのStateプロパティを設定する必要があります。
擬似コード:DDDアプリケーションのデータベースからのルックアップデータのキャッシュを実装するレイヤーはどれですか?
class AddressRepository : IAddressRepository
{
Address GetAddressById(int id)
{
// call sp and map from data reader
Address addr = new Address(id);
addr.Line = rdr.GetString(1);
addr.State = // what to do ?, ideally LookupCache.GetState(rdr.GetInt32(2))
}
}
class State
{
public int Id;
public string Abbr;
public string Name;
enum StateId {VIC, NSW, WA, SA};
public static State Victoria = // what to do, ideally LookupCache.GetState(StateId.VIC)
}
// then somewhere in address domain model
if(currentState = State.Victroia)
{
// specific logic for Victoria
}
私の質問は、このキャッシュを置くためにどの層であります?。サービス、リポジトリ、すべてのレイヤにわたって利用可能な別個のアセンブリ
私は同じ行について考えていました。私が違った唯一のことは、これらの値オブジェクトを読み取る新しいリポジトリ(技術的にはリポジトリではなく、より多くのデータアクセスオブジェクト)を作成することです。キャッシュは、これらの値オブジェクトの特定のサービス層にあります。実際のドメインリポジトリは、ドメインオブジェクトの作成時にもこのサービスを使用します。 – softveda
あなたは答えが好きなら、答えを確認してください。それは私を助けますが、それは他の人がこの質問を見つけるのを助け、確かな答えを持っています。 –