【发布时间】:2013-11-01 20:13:28
【问题描述】:
我有许多类实现了这样的接口:
public interface IProcessor
{
Foo Foo { get; set; }
int Process();
}
我有一家生产这些产品的工厂,但我提前不知道会生产多少。问题是检索必要的Foo 对象的成本很高,并且在调用Process 之前,该属性实际上并未在IProcessor 中使用。
所以如果我的工厂有这样的方法:
public IProcessor CreateProcessor(int fooId)
{
Foo foo = this.Context.GetFoo(fooId);
return new ImplementedProcessor { Foo = foo };
}
我每次都得打电话给GetFoo。我真正想要的是这样的:
public IProcessor CreateProcessor(int fooId)
{
this.CurrentlyTrackedFooIds.Add(fooId);
return new ImplementedProcessor { Foo = what??? };
}
这个想法是直到ImplementedProcessor 需要Foo 来执行它的Process 方法,它将排队 fooId 以便可以像这样批量检索它们:
this.Context.GetAllFoosAtOnceCheaply(this.CurrentlyTrackedFooIds);
是否有任何延迟加载模式可以帮助解决此类问题?我可以完全控制整个项目,因此我不受现有IProcessor 或IProcessorFactory 接口的限制。我可以想办法做到这一点(可能是某种委托?),但它们看起来都不是很干净,我想通过在项目中拥有一百万个不同的实现来避免这种事情失控。任何帮助将不胜感激!
【问题讨论】:
标签: c# design-patterns lazy-loading lazy-evaluation