你为什么不把你的解决方案分成不同的项目呢?
我喜欢使用代理模式。
在我的解决方案中,我有三个项目:
- MVC(引用了代理项目)
- 代理(它是一个类库,持有对 WCF 项目的引用)
- WCF(这个项目懂数据库,我的Entity Framework在这里)
我想这张图片可能会有所帮助:
使用这种方法,您可以在代理项目中拥有不同的存储库,您可以在它们之间进行交换。当我们进行单元测试或需要使用缓存的存储库时,它非常有用。
public abstract class Repository<T>
{
public abstract T GetById(int id);
}
使用这个进行单元测试
public class CustomerRepository : Repository<CustomerEntity>
{
public override CustomerEntity GetById(int id)
{
return new CustomerEntity()
{
Id = id,
Name = "Customer " + id
};
}
}
当你需要访问外部服务时使用这个
public class RemoteOrderRepository : Repository<OrderEntity>
{
public override OrderEntity GetById(int id)
{
// You can access your external service here
}
}
使用这个来利用缓存
public class CachedOrderRepository : RemoteOrderRepository
{
public override OrderEntity GetById(int id)
{
string cacheKey = "Order" + id;
var entity = MemoryCache.Default[cacheKey] as OrderEntity;
if(entity == null)
{
entity = base.GetById(id);
var cacheItem = new CacheItem(cacheKey, entity);
var policy = new CacheItemPolicy();
MemoryCache.Default.Add(cacheItem, policy);
}
return entity;
}
}