我有许多实现这样的接口的类:
public interface IProcessor
{
Foo Foo { get; set; }
int Process();
}
我有一家生产这些的工厂,我提前不知道会生产多少。问题是检索必要的对象是昂贵的,并且在调用该属性之前Foo
实际上并未使用该属性。IProcessor
Process
所以如果我的工厂有这样的方法:
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
界面的限制。我可以想办法做到这一点(可能是某种委托?),但它们看起来都不是很干净,我想通过在项目中拥有一百万个不同的实现来避免这种事情失控。任何帮助将不胜感激!