2011-01-07 3 views
0

저는 MVC2 앱을 사용하여 요금 체계를 관리하고 있습니다. 이러한 요금 체계는 다양한 유형이 될 수 있습니다. 매일, 매주, 매월 등 모든 유형의 속성이 있습니다. 내 클래스 구조는 다음과 같습니다ASP.NET MVC2 : 다형성 클래스 용 ViewModel

public abstract class BillingScheme { /* basic billing scheme properties */ } 
public class BillingSchemeMonthly : BillingScheme 
{ 
    public string SpecificMonths; 
} 
//etc. for other scheme types 

나는 과금 방식의 ID를 사용하여 기본 클래스를 통해 과금 체계를 검색하고, 나에게 올바른 유형의 객체를 제공합니다.

특성 SpecificMonths는; - 분리 된 월 번호 문자열을 포함하는 데이터베이스 varchar 필드에 매핑됩니다. 이 확인란을 목록을 만들 수 있도록 배열로 분할하고 싶습니다 및 viewmodel있는 facade 속성을 사용하여이 작업을 수행하는 것이 좋습니다. 내가보기 안에 바로 할 수 있지만 MVC 패턴에 대한 것 같습니다.

문제는 BillingSchemeMonthly에 대해서만이 뷰 모델을 만들 수 있으며 BillingSchemeMonthly를 BillingSchemeMonthlyViewModel로 캐스팅 할 수 없다는 것입니다. 전체 청구 계획이 상당히 크기 때문에 속성의 수가 증가 할 수 있으므로 뷰 모델에 복제 메서드를 구현하지 않을 것입니다.

미리 도움을 청하십시오.

답변

0

이상적으로 모델에서 ViewModels로 변환 할 때 별도의 변환기 클래스가 필요합니다. 우리의 MVC 프로젝트에서

우리는 컨버터의 두 가지 유형, IConverter<TFrom,TTo>Convert 방법을 정의하고, ITwoWayConverter<TFrom,TTo>ConvertToConvertFrom 방법을 정의 할 수 있습니다.

그런 다음 변환기를 필요한 컨트롤러에 삽입하고 모든 변환기를 사용합니다.

이것은 모든 것을 멋지게 유지하고 깔끔한 분리를 허용합니다.

우리가 이것을 impliment

, 우리는 우리가 찾고있는 변환의 유형을 위해 특별히 새로운 클래스를 만들 것입니다 :

public class MonthlySchemeBillingToMonthlySchemeBillingViewModelConverter :  
        IConverter<MonthlySchemeBilling,MonthlySchemeBillingViewModel> 
     { 
     public MonthlySchemeBillingViewModel Convert(MonthlySchemeBilling) 
     { 
      // Impliment conversion 
     } 
     } 
+0

기본적으로 Clone 메서드를 구현하는 것과 같습니다. 그렇습니까? 수동으로 모든 속성을 채우지 않으려했습니다. – Inertiaboogie

1

당신은 AutoMapper 번 봐 걸릴 수 있습니다.

+0

좋은 제안! 이것을 들여다 볼 것입니다. – Inertiaboogie