GPG*_*GVM 2 c# factory-pattern
我正在完成一个教程,我理解正在教授的内容,示例代码的工作原理如上所述.但我错过了一个难题,那就是工厂如何知道使用哪个"创造"....所以我想我不明白所教的一切.
在尝试研究时,我遇到了这篇文章,但由于他们的情况略有不同,因此没有回答我的"它是怎么知道"的问题.
_modelFactory.Create(f)令我感到困惑.
这是正在执行的代码
_modelFactory = new ModelFactory();
...snip....
public IEnumerable<FoodModel> Get(bool includeMeasures = true)
{
IQueryable<Food> query;
if (includeMeasures)
{ query = _repo.GetAllFoodsWithMeasures(); }
else
{ query = _repo.GetAllFoods(); }
var results = query.OrderBy(f => f.Description).Select(f => _modelFactory.Create(f));
return results;
}
Run Code Online (Sandbox Code Playgroud)
在模型工厂中有两个创建
public class ModelFactory
{
public FoodModel Create(Food food)
{
return new FoodModel()
{ ... };
}
public MeasureModel Create(Measure measure)
{
return new MeasureModel()
{ ... };
}
}
Run Code Online (Sandbox Code Playgroud)
是否存在一些隐式关联,因为"查询"属于Food类型而modelFactory表示哦,我将使用FoodModel,因为这是食物的实体表示?
在这一行:
var results = query.OrderBy(f => f.Description).Select(f => _modelFactory.Create(f));
Run Code Online (Sandbox Code Playgroud)
该 f变量的类型的Food,因为它是从未来的IQueryable<Food>实例.因此,Create(Food food)重载是被调用的.
真的没有魔法,只是基于参数的类型匹配的标准成员重载和重载选择 - 阅读本文以解释过载如何工作以及如何使用它/设计它.