2014-12-05 4 views
2

나는 튜토리얼을 진행하고 있으며 무엇을 배우고 있으며 설명 된대로 샘플 코드가 작동하는지 알고 있습니다. 그러나 나는 퍼즐에 한 조각을 놓치고 있습니다. 그리고 그것은 공장이 어떻게 "창조 할 것"인지 아는 것입니다. 그래서 나는 모든 것을 가르쳐야한다는 것을 이해하지 못한다고 생각합니다.이 모델 공장은 사용할 방법을 어떻게 알 수 있습니까?

연구를 시도하면서 나는 this article을 만났지 만, "상황을 알 수 있습니까?"라는 질문에 대해서는 상황이 약간 다르기 때문에 대답하지 않았습니다.

_modelFactory.Create (f)는 나를 혼란스럽게합니다. 여기

는 "쿼리"형 식품으로하고 modelFactory 말한다 때문에이 어떤 암시 적 연관이 있는가

public class ModelFactory 
{ 
    public FoodModel Create(Food food) 
    { 
    return new FoodModel() 
    { ... }; 
    } 

    public MeasureModel Create(Measure measure) 
    { 
     return new MeasureModel() 
     { ... }; 
    } 
} 

만들고있다 모델 공장에서

_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; 
} 

를 실행하는 코드입니다 오우, FoodModel을 사용할 것입니다. 왜냐하면 그것이 음식의 개체 표현이기 때문입니다. 이 라인에서

답변

4

: 그것이 IQueryable<Food> 인스턴스에서오고 있기 때문에

var results = query.OrderBy(f => f.Description).Select(f => _modelFactory.Create(f)); 

f 변수가 입력 Food이다. 따라서 Create(Food food) 과부하가 호출됩니다.

사실 마술과 관련이 없으며 인수의 유형 일치를 기반으로하는 표준 멤버 오버로드 및 오버로드 선택 인 read this article for an explanation of how overloading works과이를 위해/디자인을 어떻게 사용해야합니다.

+0

하지만 나에게는 마이크로 소프트의 마법이있다. ModelFactory를 인스턴스화합니다 ... 어떤 생성도 없습니다 ... 자동적으로 알고 있습니다. – GPGVM

+1

예제 코드에'ModelFactory' 클래스에 두 개의'Create' 메소드가 있다는 것이 무슨 뜻인지 잘 모르겠습니다. 'Create'는 단지 메소드 이름이거나 생성자 나 특별한 것이 아닙니다. –