你爲什麼不把你的解決方案分成不同的項目?
我喜歡使用代理模式。
在我的解決方案我有三個項目:
- MVC(有代理項目的引用)
- 代理(這是一個類庫,持有是一個引用到WCF項目)
- WCF (該項目知道數據庫,我的實體框架是在這裏)
我想這個形象可能會有所幫助:
使用這種方法,您可以在代理項目中擁有不同的存儲庫,您可以在它們之間進行交換。當我們進行單元測試時,或者當我們需要使用緩存存儲庫時,這非常有用。
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;
}
}