此模型工厂如何知道使用哪种方法

本文关键字:方法 何知道 模型 工厂 | 更新日期: 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)重载是被调用的重载。

真的不涉及魔法,只是基于参数类型匹配的标准成员重载和重载选择 - 阅读本文以了解重载的工作原理以及您应该如何使用它/设计它。

相关文章: