여러 프로젝트로 구성된 솔루션이 있습니다. 프로젝트 중 하나에 모델이 포함되어 있습니다. 다른 뷰 모델에는 ViewModel이 포함되어 있습니다. 모델을 볼 수 모델을 변환하려면상속 모델을보기 모델로 변환
나는 보통 이런 식으로 뭔가를 VM 프로젝트의 확장 메서드를 작성합니다 : 내 프로젝트 그러나
public static BananaVm ToVm(this Banana model)
{
BananaVm vm = new BananaVm();
vm.Taste = model.Taste;
return vm;
}
를, 바나나 모델은 과일 모델에서 내 VM에서 상속 프로젝트 나는 과일을 얻는다.
var vm = ((Banana)fruit).ToVm();
과 같이보고 : 아래 그림과 같이
그러므로 내가 먼저 과일의 종류를 얻을하지 않는 fruit.ToVm()를 호출하고 .ToVm()를 호출하기 전에에 캐스팅 할 수 아니에요 나는 지금 먼저 올바른 유형을 찾기 위해 스위치를 사용해야합니다, 여러 다른 과일을 가지고 다음 내가 .ToVm()를 호출 할 수있는 후 유형에 과일 캐스팅 - 예를 들면 :
Fruit fruit = FruitService.GetAFruit();
switch(fruit.GetType().Name)
{
case "Banana":
return ((Banana)fruit).ToVm();
case "Orange":
etc...
}
내가 사용하도록 강요하는 switch 문은 나에게 좋은 습관처럼 보이지 않는다. (나는 20 가지가 넘는다. 따라서 20 가지 이상의 경우가 필요합니다.)
누구나 switch 문을 피할 수있는 더 나은 해결책이 있습니까?
Vm 프로젝트에만 모델 프로젝트에 대한 참조가 있으므로 과일 클래스 자체에는 .ToVm 메서드를 추가 할 수 없습니다.
[ "공장 방법 패턴"] (http://en.wikipedia.org/wiki/Factory_method_pattern#C.23)을 사용하는 것이 좋습니다. – SuperOli
@SuperOli 나는 그것을 살펴 봤는데 나는 공장 패턴을 이해하고 있지만 그것이 내 문제를 어떻게 해결하는지 잘 알지 못한다. 정교하게 신경 쓰시겠습니까? – JensOlsen112
과일 용 VM을 만드는 이유는 무엇입니까? 공공 정적 FruitVm ToVm (이 과일 모델) {}; –