【发布时间】:2011-11-09 04:02:23
【问题描述】:
我正在使用 DDD 设计 WCF 服务。
我有一个域服务层,它调用存储库来创建域对象。存储库是使用 ADO.Net 而不是 ORM 实现的。数据来自使用存储过程的数据库。在创建一个对象时说一个地址,SP 返回一个状态的 id。 SP 不会将地址表与状态表连接起来。状态由具有 id、abbr 和 name 属性的值对象类 State 表示。当应用程序启动时,状态对象列表可以被缓存(使用 system.runtime.caching.memorycache),因为它是非易失性数据。一般来说,我有一个 LookupDataRepository 可以从表中检索所有此类查找数据。现在,AddressRepository 必须从状态 id 填充地址的状态属性。
伪代码:
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
}
我的问题是把这个缓存放在哪一层?服务,存储库,一个可跨所有层使用的单独程序集。
【问题讨论】:
标签: caching domain-driven-design repository