此模型工厂如何知道使用哪种方法
本文关键字:方法 何知道 模型 工厂 | 更新日期: 2023-09-27 18:33:25
我正在学习一个教程,我了解所教的内容,示例代码按描述工作。但是我错过了一块拼图,那就是工厂如何知道使用哪个"创建"......所以我想我不明白所教的一切。
在尝试研究时,我遇到了这篇文章,但它没有回答我的"它怎么知道"的问题,因为他们的情况略有不同。
_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;
}
在模型工厂中有两个创建
public class ModelFactory
{
public FoodModel Create(Food food)
{
return new FoodModel()
{ ... };
}
public MeasureModel Create(Measure measure)
{
return new MeasureModel()
{ ... };
}
}
是否存在一些隐式关联,因为"查询"是 Food 类型,而 modelFactory 说哦,我将使用 FoodModel,因为这是食物的实体表示形式?
在这一行中:
var results = query.OrderBy(f => f.Description).Select(f => _modelFactory.Create(f));
f
变量的类型是 Food
,因为它来自一个IQueryable<Food>
实例。因此,Create(Food food)
重载是被调用的重载。
真的不涉及魔法,只是基于参数类型匹配的标准成员重载和重载选择 - 阅读本文以了解重载的工作原理以及您应该如何使用它/设计它。